• 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">
    
  • 相关阅读:
    Codeforces Round #592 (Div. 2)
    2019 China Collegiate Programming Contest Qinhuangdao Onsite
    2019CCPC 秦皇岛 E.Escape
    2018 Multi-University Training Contest 3
    AtCoder Regular Contest 098
    Educational Codeforces Round 74 (Rated for Div. 2)
    Codeforces Round #590 (Div. 3) F
    AtCoder Regular Contest 99
    [AH2017/HNOI2017] 单旋
    [CF1304F] Animal Observation
  • 原文地址:https://www.cnblogs.com/richmanwu/p/13615428.html
Copyright © 2020-2023  润新知