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中加上字典的话,那么在每一个视图里都会加上该字典里的类型作为参数

注意:是用户对象,而不是用户名,这里是对一堆的信息封装成为对象

GETPOST请求方法:

GETPOST请求方法:

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.0str不用unicode

 

Django ORM常用字段:

字段:

blank:如果它为true,则其对应的input可以为空

editable:如果它为false,则其对应的input在页面上就不显示了,但是在数据库中还是存在的

help_text:提示对应的input填什么内容

verbose_name:对应的input的名字

 

Django Admin创建数据库数据:

 

查找和修改:

创建:2种方式,

 

过滤:

Django 增删改查:

模糊查找

 

改:

关联查询:

 

 

 

 

 

 

 

posted @ 2016-05-22 16:52  Peony_Y  阅读(397)  评论(0编辑  收藏  举报