• Django 学习(二)


    要使用 MySQL,需要安装驱动,pip install mysql

    settings.py 配置数据库

    DATABASES = { 
        'default': 
        { 
            'ENGINE': 'django.db.backends.mysql',    # 数据库引擎
            'NAME': 'runoob', # 数据库名称
            'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 
            'PORT': 3306, # 端口 
            'USER': 'root',  # 数据库用户名
            'PASSWORD': '123456', # 数据库密码
        }  
    }
    

    Python 2.x 版本不支持中文,需要在 .py 文件头部添加一行 # -*- coding: UTF-8 -*-

    告诉 Django 使用 pymysql 模块连接 MySQL 数据库:

    # 在与 settings.py 同级目录下的 __init__.py 中引入模块和进行配置
    import pymysql
    pymysql.install_as_MySQLdb()
    

    python manage.pu makemigrationspython manage.py migrate 可以在后面加一个模型文件来特别指定,这样就只会执行对应的 SQL 语句

    常见报错信息

    通过报错信息的文件路径找到 ...site-packagesDjango-2.0-py3.6.eggdjangodbackendsmysql 这个路径里的 base.py 文件,把这两行代码注释掉(代码在文件开头部分):

    # if version < (1, 3, 13):
    #     raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
    

    ORM 操作

    获取数据

    Test.objects.order_by('id')  # 获取全部并排序
    

    Request 对象

    每个视图函数的第一个参数是一个 HttpRequest 对象

    属性:path,user,method,GET,POST

    user 是一个django.contrib.auth.models.User 对象,代表当前登录的用户。如果访问用户当前没有登录,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以通过user的is_authenticated()方法来辨别用户是否登录。

    GET 是包含所有HTTP GET参数的类字典对象,QueryDict

    POST 包含所有HTTP POST参数的类字典对象,QueryDict,服务器收到空的POST请求的情况也是有可能发生的。也就是说,表单form通过HTTP POST方法提交请求,但是表单中可以没有数据。因此,不能使用语句if request.POST来判断是否使用HTTP POST方法;应该使用if request.method == "POST" (参见本表的method属性)。

    request 的方法

    QueryDict 的方法


    HttpResponse 对象

    响应对象主要有三种形式:HttpResponse()render()redirect()

    HttpResponse(): 返回文本,参数为字符串,字符串中写文本内容。如果参数为字符串里含有 html 标签,也可以渲染。

    render(): 返回文本,第一个参数为 request,第二个参数为字符串(页面名称,位于templates/app/目录下),第三个参数为字典(可选参数,向页面传递的参数:键为页面参数名,值为 views 参数名)。

    redirect():重定向,跳转新页面。参数为字符串,字符串中填写页面路径。一般用于 form 表单提交后,跳转到新页面


    反向解析

    随着功能的增加,路由层的 url 发生变化,就需要去更改对应的视图层和模板层的 url,非常麻烦,不便维护。

    这时我们可以利用反向解析,当路由层 url 发生改变,在视图层和模板层动态反向解析出更改后的 url,免去修改的操作。

    反向解析一般用在模板中的超链接及视图中的重定向。

    普通路径

    在 urls.py 中给路由起别名,name="路由别名"。

    在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名") 反向解析:

    在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" %} 反向解析。

    正则路径(无名分组)

    在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名",args=(符合正则匹配的参数,)) 反向解析。args=(,) 是个元组

    在模板 templates 中的 HTML 文件中利用 {% url "路由别名" 符合正则匹配的参数 %} 反向解析。

    正则路径(有名分组)

    在 views.py 中,从 django.urls 中引入 reverse,利用 reverse("路由别名",kwargs={"分组名":符合正则匹配的参数}) 反向解析。kwargs={:} 是个字典

    在模板 templates 中的 HTML 文件中,利用 {% url "路由别名" 分组名=符合正则匹配的参数 %} 反向解析。


    命名空间

    定义命名空间(include 里面是一个元组)格式如下:

    include(("app名称:urls","app名称"))
    

    在 views.py 中使用名称空间,语法格式如下:

    return redirect(reverse("app01:login")
    

    在 templates 模板的 HTML 文件中使用名称空间,语法格式如下:

    <form action="{% url 'app01:login' %}" method="post">
    
  • 相关阅读:
    Windows Server 2012配置开机启动项
    Windows Server 2019 SSH Server
    NOIP2017 senior A 模拟赛 7.7 T1 棋盘
    Noip 2015 senior 复赛 Day2 子串
    Noip 2015 senior复赛 题解
    Noip 2014 senior Day2 解方程(equation)
    Noip 2014 senior Day2 寻找道路(road)
    Noip 2014 senior Day2 无线网络发射器选址(wireless)
    Noip2014senior复赛 飞扬的小鸟
    Noip 2014 senior 复赛 联合权值(link)
  • 原文地址:https://www.cnblogs.com/richmanwu/p/13615428.html
Copyright © 2020-2023  润新知