**在搭建之前先要了解以下几点**
- 搭建环境 创建工程 创建应用 了解工程目录结构 定义视图与路由
需要创建django虚拟环境
环境准备:.mkvirtualenv 虚拟环境名称 -p python3
然后进入虚拟环境workon 虚拟环境名称
导入虚拟环境 : pip install -r 环境包(最下面待链接)
创建工程
1.进入到指定文件夹中,创建工程
django-admin startproject 项目名称
1.1.运行项目(需要在mange同级目录中执行)
python manage.py runserver
或者:python manage.py runserver ip:端口
创建子应用(作用: 为了模块化开发,管理不同的业务功能)
创建子应用(需要和mange.py是同级的)
python manage.py startapp 子应用名称
实例
第一个helloworld程序
编写流程:
1, 在子应用的views文件中创建视图函数
def hello_world(request):
return HttpResponse("我是helloworld")
2, 在子应用中创建urls.py文件,并编写对应的路由信息
from django.conf.urls import url
from . import views
#配置视图函数所有的路径
urlpatterns = [
# 1,编写hellworld路径
#参数1: 路由路径, 参数2: 路径关联的函数
url(r"^hello/$",views.hello_world)
]
3,将子应用的路径配置到根应用的urls中
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('users.urls'))
]
注意点: 一旦子应用注册到根应用之后,那么django不再提供默认的首页视图
项目的配置(settings.py文件)
- 作用: 用来设置项目的配置信息(比如: 数据库,redis,session,白名单等等信息)
- 常见的是:
- BASE_DIR: 表示项目的位置
- DEBUG: 默认是True, 好处: 代码改动之后自动部署, 报错之后有友好提示
- 时区表示:
LANGUAGE_CODE = 'zh-hans' #默认是英文, 如果设置为中文(zh-hans)
TIME_ZONE = 'Asia/Shanghai' #表示时区,默认是格林尼治时间, 如果设置为Asia/Shanghai
5,静态资源访问
- 作用: 给项目提供静态资源(html,css,js,image等)
- 设置过程(settings.py)
```
#表示的是项目的静态文件访问的路径
STATIC_URL = '/static/'
#指定访问静态文件的路径
STATICFILES_DIRS=[os.path.join(BASE_DIR,"my_static")]
6路由参数名设置
作用: 在访问视图的时候可以传递动态参数
路由格式:
# 2,编写路由,匹配参数
#在地址中的正则表达式需要使用()括起来, 如果需要给正则表达式起名字,格式:(?P<名字>表达式)
url(r"^params/(?P<city>.+)/(?P<year>\d{4})/$",views.params_function)
视图函数:
# 2,编写路由,匹配参数
def params_function(request,year,city):
return HttpResponse("the city is %s, the year is %s"%(city,year))
7,url地址
作用: 保证匹配的时候能够顺利执行到正常的视图函数
注意点:在编写路由的过程中,只要严格限制了开头和结尾就不会有匹配混乱的问题
reverse反解析
作用: 通过设置的路由的名字,找到视图的路径
格式:
- reverse(“namespace:name”)
- namespace: 根应用路由名字, 可以省略,
- 设置格式: url(r"^",include(“路径”,namespace=‘空间名’))
- name: 子路由的名字
- 设置格式: url(r"路径",视图函数,name=“路由名字”)
- 好处:
- 1, 防止不同子应用定义了同样的路径,而区分不开来 (了解)
- 2, 可以通过设置的路由的名字,找到视图的路径,方便重定向
8,获取get请求查询参数
- 作用: 只有获取了请求的查询参数,才能具体的知道前端需要什么样的资源
- 格式:
- request.GET, 得到的就是一个字典,不需要转换了
- reques.GET.get(“key”)
- reques.GET.getlist(“key”)
- 注意点: django当中获取的request中的数据,可以一个键对应多个值
9,获取post提交的数据
作用: 获取post,put,delete,patch方式提交的内容(请求体内容)
表单提交的post的数据(字典)
request.POST
提交的post的json数据(json字符串)
- 1, request.body, 得到的是bytes类型
- 2, bytes类型转str类型, 使用decode()方法
- 4, json字符串转dict, json.loads(jsonStr)
10,request对象中的其他参数
- 其他常见的参数属性
- request.method : 获取的是请求方式
- request.user: 获取的是请求的用户,默认是匿名用户AnonymousUser
- request.META: 获取的是请求header中的内容
11, HttpResponse对象[理解]
- 作用: 为了给前端的浏览器响应数据
- 创建方式:
- response = HttpResponse(content=“内容”, content_type=“响应的类型”,status=状态码)
- 设置响应头中的数据
- response[“key”] = “value”
- 几种常见的相应体对象
- HttpresponseNotFound
- Jsonresponse
- HttpResponseForbidden
12, 重定向redirect[理解]
- 作用: 重新定位资源的方向
- 格式:
- redirect(资源的地址)
- 资源的地址可以是本地服务器的地址,也可以是外部地址
- 注意点: 经常会和reverse配合使用
- redirect(资源的地址)
13, cookie[掌握]
- 作用: 用来储存服务端和浏览器交互的数据
- 场景: 一般做广告推送使用
- 使用格式:
- 设置cookie
- response.set_cookie(key,value,max_age)
- max_age:有效期,单位是秒,如果不设置默认就是一次浏览器会话结束
- 获取cookie
- request.COOKIE.get(“key”)
- 设置cookie
14, session[理解]
-
作用: 用来做用户登陆状态保持的
-
操作流程:
-
1,安装redis
- pip install django-redis
-
2,配置session存储相关的信息(settings.py)
#配置session存储的redis信息 CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://127.0.0.1:6379/1", "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", } } } SESSION_ENGINE = "django.contrib.sessions.backends.cache" SESSION_CACHE_ALIAS = "default"
-
3, 操作方式:
- request.session[key] = value
- request.session[key]
- request.session.pop(key)
- request.session.flush()
- request.session.set_expiry(time) 通过ttl命令可以查看过期时间
-