Django 【进阶篇】
Django 流程
Django url常用匹配语法
几种匹配(在与项目同名的文件夹里的urls.py里写,对应的函数在APP*里的views.py里写)
from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003),#匹配文章的年是2003的 url(r'^articles/([0-9]{4})/$', views.year_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail), ]
Name Groups
from django.conf.urls import url from . import views urlpatterns = [ url(r'^articles/2003/$', views.special_case_2003), url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail), ]
上面url里面的匹配和正则表达式是一样的,根据我们自己的需要去选择相应的正则表达式
include在url中的用途:项目里面的每个应用即app*里面都有自己的url
注意:url里面不能写动词,虽然不出错,但是不规范
from django.conf.urls import include, url urlpatterns = [ # ... snip ... url(r'^community/', include('django_website.aggregator.urls')), url(r'^contact/', include('django_website.contact.urls')), # ... snip ... ]
在url后面加上了字典,它的用途是:
如果在全局的url中加上字典的话,那么在每一个视图里都会加上该字典里的类型作为参数
注意:是用户对象,而不是用户名,这里是对一堆的信息封装成为对象
GET和POST请求方法:
GET和POST请求方法:
GET请求的东西是明文显示的 POST请求的东西是非明文的 PostMan插件(只能用于chrone浏览器)
Django Template渲染:
字符串 字典 列表,
>>> from django.template import Context, Template >>> t = Template('My name is {{ name }}.') >>> c = Context({'name': 'Stephane'}) >>> t.render(c) u'My name is Stephane.'
>>> from django.template import Template, Context >>> person = {'name': 'Sally', 'age': '43'} >>> t = Template('{{ person.name }} is {{ person.age }} years old.') >>> c = Context({'person': person}) >>> t.render(c) u'Sally is 43 years old.'
>>> from django.template import Template, Context >>> t = Template('Item 2 is {{ items.2 }}.') >>> c = Context({'items': ['apples', 'bananas', 'carrots']}) >>> t.render(c) u'Item 2 is carrots.'
Django Template动态显示数据:
在view.py写好多的数据,要显示在网页上,那么就要在template/app01/index.html中循环的语句
<ul> {%for user_obj in user_objs%} {% ifequal user_obj.username 'alex'%} <li style="background-color:red">username:{{user_obj.username}},name:{{user_obj.name}}</li> {%else%} <li style="">username:{{user_obj.username}},name:{{%user_obj.name%]}</li> {%endifequal%} {%endfor%} </ul>
<ul> {%for user_obj in user_objs%} {% if forloop.counter divisibleby:"2"%} <li style="background-color:red">username:{{user_obj.username}},name:{{user_obj.name}}</li> {%else%} <li style="">username:{{user_obj.username}},name:{{%user_obj.name%]}</li> {%endifequal%} {%endfor%} </ul>
Django Template常用语法:
1、先做的子页面(views.py)
def page1(request): return render(request,'app01/page1.html')
2、继承(page1.html)
{% extends 'app01/index.html' %} {% block header-menu %} <h1>sub menu 1....3....45...5</h1> {% endblock %} {% block content-container %} page1 {% endblock %}
3、index.py
<body> {% block header-menu %} <ul> <li style="display:inline-block">Home<li> <li style="display:inline-block">page1<li> <li style="display:inline-block">page2<li> <li style="display:inline-block">page3<li> </ul> {% endblock %}
Django Template 模板继承和复用:
首先看一下项目中包含的文件吧!
register_com.html:
<div style="background-color:aquamarine"> <form action="/register"> Username:<input name="username" type="text"> Password:<input name="password" type="password"> </form> </div>
page1.html:加入的语句为:
{% block father-container %} {% include 'app01/register_com.html' %} {% endblock %}
page1.html:
{% extends 'app01/index.html' %} {% block header-menu %} <h1>sub menu 1...3..45..5</h1> {% endblock %} {% block content-container %} <h1>page</h1> {% block father-container %} {% include 'app01/register_com.html' %} {% endblock %} {% endblock %}
Django配置使用数据库:
要配置好数据库的连接(在settings.py中)
需要安装mysql
在创建数据库的时候为了支持中文,需要这样写:create database ** charset utf8;(**为自己起的数据库的名字)
Django ORM常用语法:
在APP中有一个models.py,在这里创建数据库
在settings.py里:
1,把自己的应用添加进去,
2,创建数据库,
3,在admin.py中引入models
4,同步数据库,
>>>python manage.py makemigrations
>>>python manage.py migrate
5,创建超级用户,
>>>python manage.py createsuperuser
6,最后在models.py中不要忘了添加以下的语句,在python 3.0用str不用unicode
Django ORM常用字段:
字段:
blank:如果它为true,则其对应的input可以为空
editable:如果它为false,则其对应的input在页面上就不显示了,但是在数据库中还是存在的
help_text:提示对应的input填什么内容
verbose_name:对应的input的名字
Django Admin创建数据库数据:
查找和修改:
创建:2种方式,
过滤:
Django 增删改查:
模糊查找,
改:
关联查询: