准备工作:熟悉Django命令行工具
django-admin.py 是Django的一个用于管理任务的命令行工具,常用的命令整理如下:
<1> 创建一个django工程 : django-admin.py startproject mysite
当前目录下会生成mysite的工程,目录结构如下:
- manage.py ----- Django项目管理工具,通过它可以调用django shell和数据库等。
- settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
- urls.py ----- 负责把URL模式映射到应用程序。
<2>在mysite目录下创建blog应用: python manage.py startapp blog
目录结构如下:
<3>启动django项目:python manage.py runserver 8080
这样我们的django就启动起来了!
<4>生成同步数据库的脚本:python manage.py makemigrations
同步数据库: python manage.py migrate
注意:在开发过程中,数据库同步误操作之后,难免会遇到后面不能同步成功的情况,解决这个问题的一个简单粗暴方法是把migrations目录下
的脚本(除__init__.py之外)全部删掉,再把数据库删掉之后创建一个新的数据库,数据库同步操作再重新做一遍。
<5>当我们访问http://127.0.0.1:8080/admin/时,会出现:
所以我们需要为进入这个项目的后台创建超级管理员:python manage.py createsuperuser,设置好用户名和密码后便可登录啦!
<6>清空数据库:python manage.py flush
<7>查询某个命令的详细信息: django-admin.py help startapp
admin 是Django 自带的一个后台数据库管理系统。
<8>启动交互界面 :python manage.py shell
这个命令和直接运行 python 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据,还有一些小测试非常方便。
<9> 终端上输入python manage.py 可以看到详细的列表,在忘记子名称的时候特别有用。
一、URL(路由系统)
浏览器会自动给url后加一个“/”
django会自动给路由的正则表达式前面加一个“/”
django会给任何不带“/”结尾的url语句添加“/”(可设置)
短路路由规则:匹配到第一条就忽略后面所有!
所以路由顺序很重要!
1.普通路由
url(r'^index/',views.index),
2.正则路由
url(r'^page/\d+', views.page),
3.正则加括号
提供参数传递,按顺序接收,接收到的都是字符串
# urls.py url(r'^page/(\d+)', views.page),
# views.py
def page(request, index):
page = index
return HttpResponse("page: 第%s页" % page)
4.正则加括号加指定参数名
提供指定参数传递,按参数名字进行接收,顺序可变,但参数名必须相同,接收到的都是字符串。
urls.py
url(r'^page/(?P<page>\d+)/(?P<number>\d+)', views.page),
views.py
def page(request, page, number):
p = page
n = number
return HttpResponse("page: 第%s页 第%s条" %(p, n))
5.分级路由include
在app01中新建urls文件
from django.conf.urls import include url(r'index/', include(app01.urls)),
二、Views(视图函数)
http请求中产生两个核心对象:
http请求:HttpRequest对象
http响应:HttpResponse对象
1. HttpRequest对象的属性和方法
1 from django.shortcuts import render,HttpResponse 2 3 # Create your views here. 4 def index(request): 5 #request.POST 6 #request.GET 7 #return HttpResponse("hello world!") 8 #1.path:请求页面的全路径,不包括域名 9 print(request.path) 10 11 #2.get_full_path:请求页面的全路径,包括域名 12 print(request.get_full_path()) 13 14 #3.method:请求中使用的HTTP方法 15 #if req.method == "GET": 16 # do_something() 17 #elseif req.method=="POST": 18 # do_something_else() 19 #GET: 包含所有HTTP GET参数的类字典对象 20 # POST:包含所有HTTP POST参数的类字典对象 21 # 服务器收到空的POST请求的情况也是可能发生的,也就是说,表单form通过 22 # HTTP POST方法提交请求,但是表单中可能没有数据,因此不能使用 23 #if req.POST来判断是否使用了HTTP POST方法;应该使用 if req.method=="POST" 24 25 #4.COOKIES:包含所有cookies的标准Python字典对象;keys和values都是字串。 26 27 #5.FILES:包含所有上传文件的类字典对象; 28 # FILES中的每一个Key都是<input type = "file" name = "" / > 标签中name属性的值, 29 # FILES中的每一个value同时也是一个标准的python字典对象,包含下面三个Keys: 30 # filename:上传文件名,用字符串表示 31 # content_type:上传文件的Content Type 32 # content:上传文件的原始内容 33 34 #6.user:是一个django.contrib.auth.models.User对象,代表当前登陆的用户。如果访问用户当前 35 # 没有登陆,user将被初始化为django.contrib.auth.models.AnonymousUser的实例。你可以通 36 # 过user的is_authenticated()方法来辨别用户是否登陆: 37 # if req.user.is_authenticated(); 38 # 只有激活Django中的AuthenticationMiddleware时该属性才可用 39 40 # 7.session:唯一可读写的属性,代表当前会话的字典对象;自己有激活Django中的session支持时该属性才可用。