Django【一】
Django
MTV框架模型:
Model:数据存取层,处理与数据相关的所有事物,默认是db.sqlite3,我们也可以使用其他数据库,比如mysql,oracle
Temple:业务逻辑层,模型和模板的桥梁
Views:表现层,处理与表现层相关的决定,如何在页面中显示
一、创建项目
1.首先安装Django
pip install Django==2.0.3
我这里安装出现超时,加个源即可
pip install Django==2.0.3 -i https://pypi.tuna.tsinghua.edu.cn/simple/
2.创建django项目
选择你想要创建项目的路径,cmd执行
>django-admin startproject MyDjango

说明:
- manage.py 命令行工具,python manage.py help查看帮助
- urls.py url设置 访问地址
- wsgi.py python服务器网管接口,python应用于服务器之间的接口,一般不需要改
3.检查django环境
cmd执行
python manage.py runserver 0.0.0.0:8000


二、创建app
app可以理解为一个应用,一个项目下可以有多个应用
使用命令:
> python manage.py startapp xiao

三、settings添加应用

四、视图和url
试图views.py
当我们访问一个url地址时,我们希望返回一个html页面,那么定义这个规则的函数,我们称之为视图函数views.py
from django.shortcuts import render # Create your views here. from django.http import HttpResponse def hello(request): return HttpResponse("Hello World!")
url.py
具体在浏览器输入哪个地址可以访问呢?我们称之为路由配置,也就是在urls.py配置访问路径,path是访问的绝对路径,url可以支持正则匹配,url.py
from django.contrib import admin from django.urls import path from django.conf.urls import url from MyDjango.xiao import views urlpatterns = [ path('admin/', admin.site.urls), url(r'^hello$',views.hello()) ]

正则:
- ^ 匹配字符串开头,在多行模式中匹配每一行的开头,如^abc abc
- $匹配字符串末尾,在多行模式中匹配每一行的末尾,如 abc$ abc
一般推荐url配置路径/$结尾
urls配置规则
- path:只能匹配路径地址,不支持正则匹配
- re_path:支持正则匹配,django 1.0版本常用
- url:支持正则匹配,实际上就是return_re,Django 2.x版本推荐
这三者之间可以通过源码查看区别,总结来说可以统一用url()就可以,匹配路径统一在后面加/,前面不用加,如index/,page/等
五、扩展
5.1如何返回json对象呢?
1.views.py,创建views函数
from django.shortcuts import render # Create your views here. from django.http import JsonResponse def hello_json(request): res={ "code":0, "msg":"成功success", "datas":[] } return JsonResponse(res)
2.配置url
urlpatterns = [ path('admin/', admin.site.urls), url(r'^hello$',views.hello), url(r'hello_json/$',views.hello_json) ]

5.2如何返回一个html页面?
1.新建模板templates,放项目根目录或放在app下也可以,在settings配置模板路径
'DIRS': [os.path.join(BASE_DIR,'templates')],
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
2.在templates下新建login.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页</title> </head> <body> <h1>欢迎进入登录页</h1> <form action="" method="post" id="login-form"> <p> 用户名:<input id="id_username",maxlength="254",name="username",required="required"> </p> <p> 密码: <input id="id_pwd",maxlength="254",name="pwd",required="required"> </p> <p> <input type="submit" value="登录"> </p> <a> </a> </form> </body> </html>
3.视图函数views.py,用render渲染html页面
from django.shortcuts import render
def login_demo(request): return render(request,'login.html')
4.url配置
from django.contrib import admin from django.urls import path from django.conf.urls import url from xiao import views urlpatterns = [ path('admin/', admin.site.urls), url(r'^hello$',views.hello), url(r'hello_json/$',views.hello_json), url(r'^login_demo/$',views.login_demo) ]

5.3如何加载一张静态图片?
1.在app项目下新建一个static文件夹,将图片放到static目录下

直接访问:http://localhost:8000/static/1.jpg
5.4怎么获取数据?有些url是动态生成的,并不是固定的
比如:https://www.cnblogs.com/june-/archive/2019/04.html
1.试图函数
from django.http import JsonResponse def archieve(request,year,month): res={ "code":0, "msg":"成功success", "datas":[{ "year":year, "month":month }] } return JsonResponse(res)
2.url配置
urlpatterns = [ path('june-/archive/<year>/<month>.html',views.archieve) ]
当然也可以正则匹配
url(r'june-/archive/(?P<year>[0-9]{4})/(?P<month>[0-9]{2}).html',views.archieve)
- ?P是固定格式
- <year><month>是变量名称
- [0-9] 0-9任意数字
- {4} 4位数字


浙公网安备 33010602011771号