Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。
1.创建django程序
- 通过命令行
django-admin startproject mysite 创建project 一个工程可以包含多个app,app共用一个project的配置文件
cd mysite
python manage.py startapp app01 创建app01
python manage.py startapp app02 创建app02
- 通过pycharm
创建Django程序
Win:
终端,python python manage.py startapp app01 -windows
Mac:
option+R starapp app01
创建project
创建app
python manage.py startapp app01
2.django的程序目录
settings.py 全局配置文件(DATABASES
,TEMPLATE_DIRS
,STATICFILES_DIRS
等等)
urls.py 存放路由系统(映射)
wsgi.py 配置使用哪种是wsgi,用于创建socket
templates 存放模板文件
manage.py Django的启动管理程序
创建app后,可以看见django是MTV框架,我们主要是操作models templates views
models.py 通过orm对数据库进行操作
templates 模块存放
views.py 函数处理用户请求
3.一次简单的请求流程
1.定义url
from app01 import views #导入处理函数
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/', views.home),
]
2.定义views
from django.shortcuts import HttpResponse
def home(request):
#处理请求的函数必须包含request,django调用函数需要用户请求的函数封装进来
return HttpResponse("ok") #将返回字符串封装
3.启动django程序
python manage.py runserver 127.0.0.1:8000
4.访问
4.django admin 前瞻
django默认提供一个后台,admin用来配置后台;我们想对数据库操作,一般使用数据库终端连接,写sql语句执行操作;
但是admin可以快速的操作数据,django orm 可以通过类创建表,将类注册进admin中,后台即可对表进行操作。
创建超级用户:
python manage.py createsuperuser
登录admin:
http://localhost:8000/admin/
5.Django依赖数据库
migrations django的orm 可以修改表结构
python manage.py makemirations # 生成配置文件
python manage.py migrate # 根据配置文件创建数据库相关
数据库配置文件:settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
6.路由系统
- 静态路由
url(r'^home/', views.home),
- 动态路由
按照顺序,第n个匹配的数据,交给函数的第n个参数,严格按照顺序
url(r'^news/(\d+)/',views.news),
def news(request,nid):
return HttpResponse(nid)
模版的方法,将匹配的参数,传给指定的形式参数
url(r'^page/(?P<n1>\d+)/(?P<n2>\d+)', views.page),
def page(request,n2,n1):
nid = n1 + n2
return HttpResponse(nid)
- 二级路由
当请求过来,先进行一级匹配拿到url后边参数,将后边的参数进行二级匹配 最后找到处理函数
将前缀是app01开头的交给另一个路由处理对应一个文件
#project urls
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^app01/', include("app01.urls")),
url(r'^app02/', include("app02.urls")),
]
#app01 创建urls
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/', views.home),
]
#app01 views
from django.shortcuts import HttpResponse
def home(request):
return HttpResponse("app01.home")
7.数据库操作
ORM框架
code first
写类 --> 数据库表
db first
通过命令创建数据库,表,字段 -->根据表创建类
注册app
INSTALLED_APPS = [
'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app01' ] 1.配置models.py 创建类 class UserInfo(models.Model):#集成基类 username = models.CharField(max_length=64) pwd = models.CharField(max_length=64) 2.先生成一个配置文件 python manage.py makemigrations 3.通过文件进行数据库操作 python manage.py migrate
默认表名:appname_classname
基本操作:
#views中导入models
from app01 import models
def db_handle(request):
# 增加
# models.UserInfo.objects.create(username='alex', password='123', age=73)
# dic = {"username": 'eric', "password": '123', "age": 73}
# models.UserInfo.objects.create(**dic)
# 删除
# models.UserInfo.objects.filter(username='alex').delete()
# 修改
# models.UserInfo.objects.all().update(age=18)
# 查找
# models.UserInfo.objects.all() 查找所有
# models.UserInfo.objects.filter(age=18) 匹配条件
# models.UserInfo.objects.filter(age=18).first() 匹配中选择第一个
#user_list_obj 数据库表的对象,一个对象代表数据库的一行数据,它包含该表的几个字段
user_list_obj = models.UserInfo.objects.all()
# queryset,list
#for line in user_list_obj:
# print(line.username,line.age)
#return HttpResponse('ok')
实例:
数据库添加与展示
urls配置
from app01 import views
urlpatterns = [
url(r'^home/', views.home),
url(r'^db_handle/', views.db_handle),
]
views配置
from app01 import models
def db_handle(request):
# request 用户请求的所有内容
# request.POST 用户以POST提交
# request.GET 用户以GET提交
if request.method == "POST":
# request.POST.get("username") 获取后台数据
# request.POST['password']
# request.POST['age']
# d = dict(request.POST)
# models.UserInfo.objects.create(**d)
#创建数据
models.UserInfo.objects.create(username=request.POST['username'],
password=request.POST['password'],
age=request.POST['age'])
#展示数据
user_list_obj = models.UserInfo.objects.all()
return render(request, 't1.html', {'li': user_list_obj})
模板配置
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form action="/app01/db_handle/" method="post">
<p><input type="text" name="username" /></p>
<p><input type="text" name="password" /></p>
<p><input type="text" name="age" /></p>
<p><input type="submit" value="提交"/></p>
</form>
<table border="1">
<thead>
<tr>
<th>用户名</th>
<th>密码</th>
<th>年龄</th>
</tr>
</thead>
<tbody>
{% for item in li %}
<tr>
<td>{{ item.username }}</td>
<td edit="true">{{ item.password }}</td>
<td>{{ item.age }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<script src="/static/jquery-2.1.4.min.js"></script>
</body>
</html>
View Code
静态文件渲染html
1.创建templates同级目录static
2.在settings定义static位置
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
注意:
POST提交数据需要以下操作
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware', 注释
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]