django安装

1
2
3
#1.通过命令行安装
pip3 install django==1.11.11
#2.打开settings 在搜索框中输入python interpreter找到django选择历史版本下载

创建一个Django项目并启动django服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1.创建django项目:
1.使用命令行创建,这个项目所在位置为当前你命令行的位置
django-admin startproject 项目名称
2.使用pycharm创建直接创建项目时选择Django即可

2.创建djangoapp
1.在命令行中输入
python manage.py startapp app名称
2.在pycharm中的tool选项中找到run manage.py Task点击在下方输入
startapp app名称
ps:主要效果就是帮助你省去了python manage.py

3.Django项目运行
python manage.py runserver

django项目文件详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
app01 #我们创建的app项目,一个app文件夹代表一个功能
migrations #数据库迁移的记录会保存在这里面
admin.py #django后台管理
apps.py #注册使用
models.py #数据库相关的
tests.py #一个测试文件
views.py #视图函数,视图层

mysite
settings.py #django的配置文件
urls.py #路由与视图函数的对应关系
wsgi.py #wsgiref模块
db.sqllite3 #django自带的数据库
manage.py #django的入口文件

使用命令行创建Django项目与pycharm创建Django项目的区别

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#pycharm创建的Django项目
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')] #template文件夹的路径
},
]
#命令行创建的Django项目
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': []
},
]

pycharm会在创建Django项目时为你自动添加一个template文件夹以及在配置文件中添加路径,所以若是使用命令行创建需要添加DIRS

静态文件的配置

1
2
3
4
STATIC_URL = '/static/'  # 起到令牌的效果,若是对上令牌则会去下面的路径中查找文件
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"), # 静态文件存放位置
]

Django三件套

1
2
#模块的导入
from django.shortcuts import HttpResponse, render, redirect
HttpResponse
1
2
3
#返回字符串
def first(request):
return HttpResponse('hello world') #返回hello world 给页面
render
1
2
3
4
5
6
7
8
9
10
11
#返回一个网页
def first(request):
return render(request,'first.html') #返回一个html页面

render参数:
request: 用于生成响应的请求对象
template_name: 要使用的模板的完整名称, 可选的参数
context: 添加到模板上下文的一个字典. 默认是一个空字典. 如果字典中的某个值是可调用的, 视图将在渲染模板之前调用它.
content_type:  生成的文档要使用的MIME类型. 默认为DEFAULT_CONTENT_TYPE设置的值. 默认为"text/html"
status: 响应的状态码. 默认为200
useing: 用于加载模板的模板引擎的名称
redirect
1
2
3
#重定向
def first(request):
return redirect('https://www.baidu.com') #跳转到百度
补充:JsonResponse
1
2
3
from django.http import JsonResponse #这个模块允许你直接将字典转化为一个json对象返回,若是其余的数据类型也想返回需要将safe参数设置为False
def home(request):
return JsonResponse({'egon':18,'tank':19,'sadnesspineapple':22})

通过form表单往后端传输数据

1
2
3
4
5
6
7
8
#前端往后端提交代码的方式有两种
1.post
post请求可能会报错显示
Forbidden (403)CSRF verification failed. Request aborted.
这时需要去settings修改配置'django.middleware.csrf.CsrfViewMiddleware',将这一行注释
2.get
#并且表单中的action=""若是不填的话,表单会默认会对当前的网址再发送一次请求

request对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
djongo中的request对象,简单的说就是一个通过wigiref返回的一个对象,可以用于获取请求的各种数据

1.request.method #获得返回请求的方式(GET/POST) 并且是全大写的字符串形式

2.request.POST #获得POST请求的数据 可以将获得的数据看做一个字典,使用字典的方式取值
>>><QueryDict: {'username': ['dsb'], 'possword': ['123']}>
request.POST.get('username')
值得一提的是get取得是列表中的最后一个值,若想获得列表需要使用
request.POST.getlist('username')

3.request.GET #获得GET请求的数据

4.request.path系列
1.request.path
2.request.path_info
3.request.get_full_path() #获得路径中的全部数据,包括?后的参数

5.request.body #获得请求体内的数据

6.request.FILES
获得一个类似字典的对象 <MultiValueDict: {'file': [<InMemoryUploadedFile:8FCC3F4917F92595DE62B342DCBEF4C4.jpg (image/jpeg)>]}> 一般用于获得上传的文件
eg:
def login(request,password):
if request.method =='POST':
file = request.FILES
print(file)
#>>><MultiValueDict: {'file': [<InMemoryUploadedFile: 8FCC3F4917F92595DE62B342DCBEF4C4.jpg (image/jpeg)>]}>
print(file.get('file')) #获得一个文件对象
with open(file.get('file').name,'wb')as f:
for line in file.get('file').chunks(): #不加chunks()也行,但是官方建议加上
f.write(line)
return render(request,'login.html')
ps:上传文件form表单后面的enctype需要改成enctype="multipart/form-data"

7.request.META
包含了所有本次HTTP请求的Header信息,比如用户IP地址和用户Agent
CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
CONTENT_TYPE —— 请求的正文的MIME 类型。
HTTP_ACCEPT —— 响应可接收的Content-Type。
HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
HTTP_HOST —— 客服端发送的HTTP Host 头部。
HTTP_REFERER —— Referring 页面。
HTTP_USER_AGENT —— 客户端的user-agent 字符串。
QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
REMOTE_ADDR —— 客户端的IP 地址。
REMOTE_HOST —— 客户端的主机名。
REMOTE_USER —— 服务器认证后的用户。
REQUEST_METHOD —— 一个字符串,例如"GET""POST"
SERVER_NAME —— 服务器的主机名。
SERVER_PORT —— 服务器的端口(是一个字符串)。
  从上面可以看到,除 CONTENT_LENGTH 和 CONTENT_TYPE 之外,请求中的任何 HTTP 首部转换为 META 的键时,
都会将所有字母大写并将连接符替换为下划线最后加上 HTTP_ 前缀。
所以,一个叫做 X-Bender 的头部将转换成 META 中的 HTTP_X_BENDER 键。

djongo连接mysql

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
在配置文件中修改
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME': 'mysite', #数据库名称
'USER':'root',
'HOST':'127.0.0.1',
'PORT':3306,
'PASSWORD':'1',
'CHARSET':'utf8'
}
}

#但是这样子会报错,因为djongo内部默认是以MySQLdb模块连接的,但是MySQLdb模块兼容性较差容易报错,因此我们需要换成pymysql模块
#我们可以在任意的一个init文件中添加两句话就可以解决问题
import pymysql
pymysql.install_as_MySQLdb()