一、主要文件介绍

mysite项目文件夹

    —mysite文件夹

        —settings.py        配置文件

        —urls.py              路由视图函数对应关系(路由层)

        —wsgi.py             wsgiref模块

    —manage.py            django的入口文件

    —db.sqlite3               django自带sqlite3数据库(小型数据库 功能不是很多还有bug)

    —templates                html文件存放文件夹

    —static                      存放静态文件

        —css

        —js

        —img

        其他第三方文件

    —app01文件夹

        —admin.py           django后台管理

        —apps.py             注册使用

        —migrations文件夹        数据库迁移记录

        —models.py         数据库相关模型类(orm)

        —tests.py             测试文件

        —views.py            视图函数(视图层)

二、settings.py配置文件

INSTALLED_APPS    # 注册app
MIDDLEWARE        # django中间件
TEMPLATES         # html文件存放路径配置
DATABASES         # 项目指定数据库
LANGUAGE_CODE = 'en-us'    # 文字编码
TIME_ZONE = 'UTC'    # 时间
APPEND_SLASH = False    # 取消url自动斜杠 默认是True
STATIC_URL = 'static/'  # 类似于访问静态文件的令牌
"""如果你想要访问静态文件 你就必须以static开头"""
STATICFILES_DIRS = [    # 静态文件配置
    os.path.join(BASE_DIR, "static"),
]
# django链接MySQL
# 1.配置文件配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'data',
        'USER': 'root',
        'PASSWORD': '123123',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'CHARSET': 'utf8'
    }
}
# 2.在项目名下的init任意应用名下的init文件中书写以下代码即可
import pymysql
pymysql.install_as_MySQLdb()

三、urls.py

from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('index/', views.index),  # 路由匹配
    path('login/', views.login),  # 登录功能
    path('register/', views.reg),  # 注册功能
    path('userlist/', views.userlist),  # 展示用户列表
    path('edit_user/', views.edit_user, name='xxx'),  # 编辑用户 name别名反向解析
    # 反向解析前端<a href="{% url 'xxx' %}?user_id={{ user_obj.id }}" class="btn btn-primary btn-xs"&gt;编辑</a&gt;
    # 反向解析后端 from django.shortcuts import reverse    reverse('xxx')
    path('delete_user/', views.delete_user),  # 删除用户
]

四、views.py

from django.shortcuts import render, HttpResponse, redirect

def index(request):
    # django小白必会三板斧(render, HttpResponse, redirect)
    # return HttpResponse("hello world")  # 返回字符串类型数据
    # return render(request, 'index.html')  # 返回html文件 自动templates文件夹下查找文件
    # return redirect('https://www.baidu.com')  # 跳转别人的网址
    # return redirect('/login')  # 跳转自己网址

    # 模板语法
    user_dict = {'username': 'zhangsan', 'age': 100}
    # 第一种传值方式:更加的精确 节省资源
    # return render(request, 'index.html', {'user_dict': user_dict})
    # 第二种传值方式:当你要传的数据特别多的时候
    """locals会将所有在名称空间所有的名字全部传递给html页面"""
    return render(request, 'index.html', locals())

def login(request):
    return HttpResponse('login')
# request对象方法request.method    # 返回请求方式 并且是全大写字符串形式
request.POST  # 获取用户提交post请求数据(不包含文件) < QueryDict: {'username': ['zs'], 'password': ['123']} >
    request.POST.get()    # 只获取列表最后一个元素
    request.POST.getlist()    # 直接将列表取出
request.GET  # 获取用户提交get请求数据 get请求携带的数据大小限制4kb左右而post请求则没有限制
    request.GET.get()    # 只获取列表最后一个元素
    request.GET.getlist()    # 直接将列表取出
request.FILES  # 获取文件数据
request.path  # /login/
request.path_info  # /login/
request.get_full_path()  # /login/?username=zhangsan/

# models操作数据库
models.User.objects.create(username=username, password=password)  # 增
models.User.objects.filter(id=delete_id).delete()  # 删
models.User.objects.filter(id=edit_id).update(username=username, password=password)  # 改
user_queryset = models.User.objects.all()  # 查
app01 import models
def login(request):
    if request.method == 'POST':
        # 获取用户提交的数据
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 查询数据库数据
        user_obj = models.User.objects.filter(username=username).first()  # select * from user where username='zero';
        # print(user_obj)  # <QueryDict: {'username': ['zero'], 'password': ['123']}>
        if user_obj:
            if password == user_obj.password:
                return HttpResponse("登录成功")
            else:
                return HttpResponse("密码错误")
        else:
            return HttpResponse("用户存在")
    return render(request, 'login.html')
def reg(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 第一种方法:数据库的增加
        # 直接获取用户数据存入数据库
        # res = models.User.objects.create(username=username, password=password)
        # print(res, res.username, res.password)
        # 第二种方法:数据库的增加
        user_obj = models.User(username=username, password=password)
        user_obj.save()  # 保存数据
    return render(request, 'reg.html')
def userlist(request):
    # 查询出用户表里面的所有数据
    # 方式一
    # data = models.User.objects.filter()  # select * from user
    # print(data)
    # 方式二
    user_queryset = models.User.objects.all()

    return render(request, 'userlist.html', locals())
def edit_user(request):
    # 获取url问号后面的参数
    edit_id = request.GET.get('user_id')
    # 查询当前用户想要编辑的数据对象
    edit_obj = models.User.objects.filter(id=edit_id).first()
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 去数据库修改对应内容
        # 修改数据方式一
        models.User.objects.filter(id=edit_id).update(username=username, password=password)
        # 修改数据方式二
        # edit_obj.username = username
        # edit_obj.password = password
        # edit_obj.save()
        # 跳转到数据的展示页面
        return redirect('/userlist/')
    # 将数据对象展示页面上
    return render(request, 'edit_user.html', locals())
def delete_user(request):
    # 获取用户想要删除的数据id值
    delete_id = request.GET.get('user_id')
    # 直接去数据库中找到对应的数据删除即可
    models.User.objects.filter(id=delete_id).delete()
    return redirect('/userlist/')

五、Django ORM models.py

"""
ROM:对象关系映射
作用:通过pythom面向对象代码简单快捷的操作数据库
不足之处:封装程度太高 有时候sql语句的效率偏低 需要自己写SQL语句
数据库迁移命令python manage.py makemigrations
    python manage.py migrate
创建项目命令startapp app02
"""
from django.db import models

class User(models.Model):
    """
    创建模型表的时候如果主键字段名没有额外的叫法(默认id) 那么主键字段可以省略不写
    max_length字段长度
    verbose_name:用来字段解释
    null=True:该字段可以为空
    default=18:默认值
    """
    username = models.CharField(max_length=32, verbose_name='用户名')  # username varchar(32)
    # password = models.IntegerField()  # password int
    # 字段修改
    password = models.CharField(max_length=32)  # password int
    # 字段的增加
    age = models.IntegerField(default=18)
# 创建关系
class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)  # 一对默认就是与Publish表的主键字段做外键关联 on_delete=models.CASCADE级联删除
    authors = models.ManyToManyField(to='Author')  # 多对多 ManyToManyField会自动创建第三张表

class Publish(models.Model):
    name = models.CharField(max_length=32)
    addr = models.CharField(max_length=32)

class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()
    author_detail = models.OneToOneField(to='AuthorDetail', on_delete=models.CASCADE)  # 一对class AuthorDetail(models.Model):
    phone = models.BigIntegerField()
    addr = models.CharField(max_length=32)

六、templates

1.index.html

{{ user_dict }}    # 模板语法

{% load static %}    # 静态文件动态解析
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">

2.login.html

<h1 class="text-center">登录功能</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control"></p>
                <p>password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-success btn-block">
            </form>
        </div>
    </div>
</div>

3.reg.html

<h1 class="text-center">注册功能</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control"></p>
                <p>password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-danger btn-block">
            </form>
        </div>
    </div>
</div>

4.userlist

<h1 class="text-center">数据展示</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <table class="table table-striped table-hover">
                <thead>
                <tr>
                    <th>ID</th>
                    <th>username</th>
                    <th>password</th>
                    <th>action</th>
                </tr>
                </thead>
                <tbody>
                {% for user_obj in user_queryset %}
                    <tr>
                        <td>{{ user_obj.id }}</td>
                        <td>{{ user_obj.username }}</td>
                        <td>{{ user_obj.password }}</td>
                        <td>
                            <a href="{% url 'xxx' %}?user_id={{ user_obj.id }}" class="btn btn-primary btn-xs">编辑</a>
                            <a href="/delete_user/?user_id={{ user_obj.id }}" class="btn btn-danger btn-xs">删除</a>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>

5.edit_user.html

<h1 class="text-center">编辑功能</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control" value="{{ edit_obj.username }}"></p>
                <p>password:<input type="text" name="password" class="form-control" value="{{ edit_obj.password }}"></p>
                <input type="submit" class="btn btn-info btn-block" value="编辑">
            </form>
        </div>
    </div>
</div>

七、django请求生命周期流程图

原文地址:https://blog.csdn.net/m0_64599482/article/details/128100516

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_23252.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注