博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第十六 django进一步了解
阅读量:6939 次
发布时间:2019-06-27

本文共 15914 字,大约阅读时间需要 53 分钟。

一、关于django 的URLS

1.配置固定访问

1.1.配置fly views

from django.shortcuts import render,HttpResponse# Create your views here.def About_1999(request):    print("Nothing in 1999")    return HttpResponse("We will win in 1999!")

1.2.配置总的urls

from django.conf.urls import urlfrom django.contrib import adminfrom fly import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^fly/1999',views.About_1999),]

1.3.启动程序

python manage.py runserver 127.0.0.1:8000

1.4.查看页面

如上是固定模式访问,不可能一直写固定匹配吧,如果我想100个这样的,那岂不是要写100个,所以模糊匹配

2.配置模糊匹配年

2.1.配置fly views

from django.shortcuts import render,HttpResponse# Create your views here.def About_1999(request):    print("Nothing in 1999")    return HttpResponse("We will win in 1999!") def About_Cen19(request,year):    print("We all in century ")    return HttpResponse("We all in century 19") #这里必须加上year,否则会报错,因为url里面加了此别名

2.2.配置总的urls

from django.conf.urls import urlfrom django.contrib import adminfrom fly import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^fly/1999',views.About_1999),    url(r'^fly/(?P
[0-9]{4})/$',views.About_Cen19), #year是一个别名参数,可以随意指定]

2.3.查看结果

如果匹配1999呢?

如果匹配到了,1999,那么就不会继续向下匹配了

3.匹配年月日

3.1.配置fly views

from django.shortcuts import render,HttpResponse# Create your views here.def About_1999(request):    print("Nothing in 1999")    return HttpResponse("We will win in 1999!")def About_Cen19(request,year):    print("We all in century ")    return HttpResponse("We all in century 19")def About_Ym(request,year,month):    print("we will met each other in 7 1992")    return HttpResponse("we will met each other in %s %s" %(month,year))

3.2.配置urls

from django.conf.urls import urlfrom django.contrib import adminfrom fly import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^fly/1999',views.About_1999),    url(r'^fly/(?P
[0-9]{4})/$',views.About_Cen19), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/$',views.About_Ym), #增加别名参数]

3.3.查看结果

同样,如果匹配到1999,则不继续匹配

4.继续匹配年月日

4.1.配置fly views

from django.shortcuts import render,HttpResponse# Create your views here.def About_1999(request):    print("Nothing in 1999")    return HttpResponse("We will win in 1999!")def About_Cen19(request,year):    print("We all in century ")    return HttpResponse("We all in century 19")def About_Ym(request,year,month):    print("we will met each other in 7 1992")    return HttpResponse("we will met each other in %s %s" %(month,year))def About_Ymd(request,year,month,day):    print("we can find ya mei die")    return HttpResponse("we we can find ya mei die %s %s %s" %(day,month,year))

4.2.配置urls

from django.conf.urls import urlfrom django.contrib import adminfrom fly import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^fly/1999',views.About_1999),    url(r'^fly/(?P
[0-9]{4})/$',views.About_Cen19), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/$',views.About_Ym), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/(?P
[0-9]{2})/$',views.About_Ymd),]

4.3.查看结果

 

匹配1999相关:

5.配置子项目urls

5.1.配置子项目app01 views

from django.shortcuts import render,HttpResponse# Create your views here.def AboutFight(request):    print("we must fight")    return HttpResponse("We Must fight right now !")

5.2.配置子项目urls

from django.conf.urls import urlfrom app01 import views as fighturlpatterns = [    url(r'$',fight.AboutFight),]

5.3.配置总urls 导入子项目的urls

from django.conf.urls import url,includefrom django.contrib import adminfrom fly import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^fly/1999',views.About_1999),    url(r'^fly/(?P
[0-9]{4})/$',views.About_Cen19), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/$',views.About_Ym), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/(?P
[0-9]{2})/$',views.About_Ymd), url('^dig/$',include('app01.urls')),]

 5.4.访问页面

6.配置子项目的其它路径

6.1.配置app01 views

from django.shortcuts import render,HttpResponse# Create your views here.def AboutFight(request):    print("we must fight")    return HttpResponse("We Must fight right now !")def NotOnlyF(request,do):    print("Not only Fight")    return HttpResponse("The Word not only fight,we can lear how to %s" %(do))

6.2.配置子项目app01 urls

from django.conf.urls import urlfrom app01 import views as fighturlpatterns = [    url(r'(?P
)/$',fight.NotOnlyF), #先匹配精确 url(r'$',fight.AboutFight), #匹配没有参数,一般首页]

6.3.配置总urls

from django.conf.urls import url,includefrom django.contrib import adminfrom fly import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^fly/1999',views.About_1999),    url(r'^fly/(?P
[0-9]{4})/$',views.About_Cen19), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/$',views.About_Ym), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/(?P
[0-9]{2})/$',views.About_Ymd), url('^dig/',include('app01.urls')), #引入所有app01 的urls]

6.4.查看结果

没有获取到参数,奇怪

7.全局引入参数

某些情况下,在子页面会引入全局的参数

7.1.全局urls

from django.conf.urls import url,includefrom django.contrib import adminfrom fly import viewsurlpatterns = [    url(r'^admin/', admin.site.urls),    url(r'^fly/1999',views.About_1999),    url(r'^fly/(?P
[0-9]{4})/$',views.About_Cen19), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/$',views.About_Ym), url(r'^fly/(?P
[0-9]{4})/(?P
[0-9]{2})/(?P
[0-9]{2})/$',views.About_Ymd), url('^dig/',include('app01.urls'),{ 'gold':'coin'}),]

7.2.必须在子项目的views 里面引入参数

from django.shortcuts import render,HttpResponse# Create your views here.def AboutFight(request):    print("we must fight")    return HttpResponse("We Must fight right now !")def NotOnlyF(request,sm,gold):    print("Not only Fight %s %s" %(sm,gold))    return HttpResponse("The Word not only fight,we can lear how to %s" %(sm))

7.3.运行结果

二、django Template

1.基本模板语法

from django.template import Context, Templatet = Template('My name is {
{ name }}.')c = Context({
'name': 'ckl'})t.render(c)'My name is ckl.'

注意,应该是django环境运行

2.同一个模板,渲染多个context

from django.template import Context, Templatet = Template('Hello kitty, hello {
{ name }}.')t.render(Context({
'name':'wuyu'}))'Hello kitty, hello wuyu.'t.render(Context({
'name':'zhoulaosi'}))'Hello kitty, hello zhoulaosi.'t.render(Context({
'name':'cixi'}))'Hello kitty, hello cixi.'

3.深度的dict内容访问

from django.template import Context, Templatenihhgehh = {
'name':'shenxing','age':'23'}t = Template('{
{ man.name }} is {
{ man.age }} years old')c = Context({
'man':nihhgehh})t.render(c)'shenxing is 23 years old'

4.其它模块引入

from django.template import Context, Templateimport datetimelo = datetime.date(2050,8,8)lo.year2050lo.month8lo.day8

三、配置访问动态数据

1.配置views

from django.shortcuts import render,HttpResponse# Create your views here.def KanYeMian(request):    print("just do it!")    songdic = {        'weather':'rain',        'feel':'cold',        'color':'charming',    }    return render(request, 'app01/index.html',{
'songObj':songdic})

2.配置html

    
SuoHa

Just SuoHa

{% for i in songObj.values %} {% if i == 'rain' %}

it is {

{ i }}

{% elif i == 'cold' %}

would you feel {

{ i }}?

{% elif i == 'charming' %}

can you see the {

{ i }} blank.

{% endif %} {% endfor %}

3.配置url

from django.conf.urls import urlfrom app01 import views as fighturlpatterns = [    url(r'suoha/',fight.KanYeMian),    #url(r'(?P
)/',fight.NotOnlyF), #url(r'$',fight.AboutFight),]

4.查看结果:

四、配置模板嵌套

1.原始代码及页面

1.1.原始代码

    
SuoHa

I LOVE A QUITE NIGHT AT HOME


Just SuoHa

{% for i in songObj.values %} {% if i == 'rain' %}

it is {

{ i }}

{% elif i == 'cold' %}

would you feel {

{ i }}?

{% elif i == 'charming' %}

can you see the {

{ i }} blank.

{% endif %} {% endfor %}

A SAD MAN THE SENCE ON HIS FACE

1.2.原始页面

2.配置新页面

2.1.配置views

def obsc(request):    return render(request,'app01/obscure.html')

2.2.配置urls

from django.conf.urls import urlfrom app01 import views as fighturlpatterns = [    url(r'suoha/',fight.KanYeMian),    url(r'obs/',fight.obsc),    #url(r'(?P
)/',fight.NotOnlyF), #url(r'$',fight.AboutFight),]

2.3.配置html

    
Title

obsure,we can not fond anything......

2.4.启动服务,查看新页面

3.配置嵌套

3.1.继承原始模板

{% extends "app01/index.html" %}    

obsure,we can not fond anything......

3.2.查看页面

页面继承了父模板的全部,没有自己的内容

3.3.配置继承并重写

3.3.1.父类定义

    
SuoHa

I LOVE A QUITE NIGHT AT HOME


{% block kara %} //重写开始部分

Just SuoHa

{% for i in songObj.values %} {% if i == 'rain' %}

it is {

{ i }}

{% elif i == 'cold' %}

would you feel {

{ i }}?

{% elif i == 'charming' %}

can you see the {

{ i }} blank.

{% endif %} {% endfor %} {% endblock %} //重写结束

A SAD MAN THE SENCE ON HIS FACE

3.3.2.继承重写

{% extends "app01/index.html" %}{% block kara %}    

obsure,we can not fond anything......

{% endblock %}

3.3.4.查看页面

4.如果继承重写顶部

4.1.父类模板定义

    
SuoHa {% block top %} //定义模板开始,名称自定义

I LOVE A QUITE NIGHT AT HOME

{% endblock %} //定义结束

{% block kara %}

Just SuoHa

{% for i in songObj.values %} {% if i == 'rain' %}

it is {

{ i }}

{% elif i == 'cold' %}

would you feel {

{ i }}?

{% elif i == 'charming' %}

can you see the {

{ i }} blank.

{% endif %} {% endfor %} {% endblock %}

A SAD MAN THE SENCE ON HIS FACE

4.2.子模板重写

{% extends "app01/index.html" %}{% block top %}    THIS IS TOP{% endblock %}{% block kara %}    

obsure,we can not fond anything......

{% endblock %}

4.3.查看页面

5.模板include

5.1.增加新的页面

    
register
用户名:
密码:

5.2.引入新增页面

{% extends "app01/index.html" %}{% block top %}    THIS IS TOP{% endblock %}{% block kara %}    

obsure,we can not fond anything......

{% include "app01/register.html" %}{% endblock %}

5.3.查看页面

6.多层继承

6.1.配置sunzi页面

{% extends "app01/obscure.html" %}

继承父亲obs的页面

6.2.配置views

def Gs(request):    return render(request,'app01/grandson.html')

6.3.配置urls

from django.conf.urls import urlfrom app01 import views as fighturlpatterns = [    url(r'suoha/',fight.KanYeMian),    url(r'obs/',fight.obsc),    url(r'sunzi/',fight.Gs),    #url(r'(?P
)/',fight.NotOnlyF), #url(r'$',fight.AboutFight),]

6.4.查看结果

同父模板完全一样

7.多层继承

如上继承了剁成,在父模板进行定义,自己修改

原始页面:

7.1.定义父模板继承

{% extends "app01/index.html" %}{% block top %}    THIS IS TOP{% endblock %}{% block kara %}    

obsure,we can not fond anything......

{% block father %} //父模板定义修改开始 {% include "app01/register.html" %} {% endblock %} //父模板修改结束{% endblock %}

7.2.子页面进行修改

{% extends "app01/obscure.html" %}{% block father %}    

Here is father's land

//修改继承父模板的内容{% endblock %}

7.3.修改后页面

五、数据库连接及表创建

1.配置django settings

1.1.配置apps

INSTALLED_APPS = [    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'app01.apps.App01Config',    'fly',  //此处增加自己的项目]

1.2.配置mysql连接

1.2.1.注意:mysqldb 默认不知python3的,所以要使用,安装pymysql

在项目__init__.py 里增加:

import pymysqlpymysql.install_as_MySQLdb()

1.2.2.配置mysql连接参数

DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME':'dj16',        'HOST':'192.168.1.1',        'PORT':'',        'USER':'sayyou',        'PASSWORD':'16893',    }}

1.3.创建表,此处模拟的是书、作者、出版社

1.3.1.配置models.py

from django.db import models# Create your models here.class Publisher(models.Model):    name = models.CharField(max_length=32),    address = models.CharField(max_length=50)    city = models.CharField(max_length=60)    stat_province = models.CharField(max_length=50)    country = models.CharField(max_length=50)    websit = models.URLField()class Author(models.Model):    first_name = models.CharField(max_length=30)    last_name = models.CharField(max_length=40)    email = models.EmailField()class Book(models.Model):    name = models.CharField(max_length=30)    authors = models.ManyToManyField(Author)  #作者和书多对多    publisher = models.ForeignKey(Publisher)  #书和出版商一对多    publication_date = models.DateField()

1.4.运行生成创建表文件

python manage.py makemigrations

查看文件:

# -*- coding: utf-8 -*-# Generated by Django 1.11.5 on 2017-10-09 02:20from __future__ import unicode_literalsfrom django.db import migrations, modelsimport django.db.models.deletionclass Migration(migrations.Migration):    initial = True    dependencies = [    ]    operations = [        migrations.CreateModel(            name='Author',            fields=[                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),                ('first_name', models.CharField(max_length=30)),                ('last_name', models.CharField(max_length=40)),                ('email', models.EmailField(max_length=254)),            ],        ),        migrations.CreateModel(            name='Book',            fields=[                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),                ('name', models.CharField(max_length=20)),                ('publication_date', models.DateField()),                ('authors', models.ManyToManyField(to='fly.Author')),            ],        ),        migrations.CreateModel(            name='Publisher',            fields=[                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),                ('name', models.CharField(max_length=32)),                ('address', models.CharField(max_length=50)),                ('city', models.CharField(max_length=60)),                ('stat_province', models.CharField(max_length=50)),                ('country', models.CharField(max_length=50)),                ('websit', models.URLField()),            ],        ),        migrations.AddField(            model_name='book',            name='publisher',            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='fly.Publisher'),        ),    ]

1.5.创建数据库表

python manage.py migrate

查看表:

 2.配置admin 添加数据

2.1.配置admin.py

from django.contrib import admin# Register your models here.from fly import modelsadmin.site.register(models.Publisher)admin.site.register(models.Author)admin.site.register(models.Book)

2.2.登录页面

 

2.3.创建登录用户

python manage.py createsuperuser

密码要复杂度要求

2.4.登录页面

2.5.创建数据

2.5.1.创建作者

 

 

2.5.2.查看作者名称

创建了两个作者,却无法查看作者名称,解决如下

from django.db import models# Create your models here.class Publisher(models.Model):    name = models.CharField(max_length=32)    address = models.CharField(max_length=50)    city = models.CharField(max_length=60)    stat_province = models.CharField(max_length=50)    country = models.CharField(max_length=50)    websit = models.URLField()    def __str__(self):        return "<%s>" %(self.name)class Author(models.Model):    first_name = models.CharField(max_length=30)    last_name = models.CharField(max_length=40)    email = models.EmailField()    def __str__(self):        return "<%s %s>" %(self.first_name,self.last_name)class Book(models.Model):    name = models.CharField(max_length=20)    authors = models.ManyToManyField(Author)    publisher = models.ForeignKey(Publisher)    publication_date = models.DateField()    def __str__(self):        return "<%s>" %(self.name)

重启服务,查看进程:

 继续添加信息:

 

转载于:https://www.cnblogs.com/ckl893/p/7591821.html

你可能感兴趣的文章
Silverlight 解谜游戏 之十四 音效
查看>>
git集锦
查看>>
利用python做数据分析(四)-数据合并
查看>>
C# 发送Http请求 - WebClient类
查看>>
设计模式(十三): Proxy代理模式 -- 结构型模式
查看>>
Sql Server性能优化——Partition(创建分区)<转>
查看>>
使用jqprint插件完成页面打印
查看>>
i++与++i 辨析
查看>>
HDFS 入门
查看>>
学习AJAX Toolskit之解决故障:RegisterDataItem can only be called during an async postback.
查看>>
startActivityForResult不返回结果
查看>>
消除“Permission is only granted to system apps”错误
查看>>
entity framework自动生成数据库外键“表名_外键”的解决方案
查看>>
JS魔法堂:彻底理解0.1 + 0.2 === 0.30000000000000004的背后
查看>>
ORA-12170: TNS:Connect timeout occurred
查看>>
二叉搜索树的插入与删除
查看>>
esd-ESD试题
查看>>
瘦客户端那些事 - 远程传输协议
查看>>
IT Configuration Management
查看>>
linux下git的安装和使用(转)
查看>>