Django 框架
#c\s结构:
例如:要想使用qq就需要在电脑上装一个qq客户端,然后通过qq软件访问服务器,进行操作。
#B\S结构:
例如:想要使用京东购物,只需要在电脑浏览器访问jd.com
MVC设计模式
MVC、MVT实现了前后端和数据的分离,实现了程序可维护性可扩展性.
M==> Model ==>针对数据库层面操作==>程序调用模型.`模型调用数据库
V==>view==>针对用户界面数据显示==>模板(HTML)
C==> contraller==>接收用户请求,调用模型和视图,给用户响应。
Django 采用MVT模式
M==>数据层
V==>业务逻辑
T==>template ==>html
##使用djiango搭建项目
#在一个目录下执行以下命令,就会创建一个web目录
$ django-admin startproject web
##运行项目
$ python3 manage.py runserver
#浏览器访问http://127.0.0.1:8000/
#默认监听本机地址127.0.0.1,可以修该settinng.py配置文件
ALLOWED_HOSTS = ['*']
##运行项目
$ python3 manage.py runserver 0:8000
#创建一个应用命名为home
在Web目录下
$ python3 manage.py startapp home
#打开views.pyfrom django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
#创建视图函数
def index (request):
return HttpResponse('HelloWorld!!!')
#找到web/web/urls
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('home.urls')),
]
#在home应用中创建urls.py
from django.conf.urls import url,include
from.import views
urlpatterns = [
url(r'^$', views.index),
]
请求流程
用户输入URL地址发起请求,服务器收到请求后,交给根路由(项目同名下的urls.py)
根路由解析后制定应用下子路由,
子路由解析地址,调用对应视图函数响应
##使用模板文件
找到setting.py文件,配置模板目录
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',
],
},
},
]
- 在manage.py的同级目录下创建templates文件夹
- 在视图函数中使用render函数加载制定模板
def demo(request):
return render(request,'a.html')
3.
路由
路由就是在urls 中进行规则的配置
按照从上往下顺序执行
如果匹配到则加载指定的视图
##路由参数
路由参数就是定义在路由规则时,使用小括号()括起来的内容,将作为参数传递给视图函数
路由参数就是把URL路径中一部分作为参数来使用。
def acc(request,ID):
return HttpResponse('12553')
url(r'^acc/([0-9]{1})/$', views.acc),
##命名组,命名参数
命名组和路由参数一样把URL路径中一部分作为参数来使用
不同的是 命名组会把当前参数作为关键字传给视图函数
因此视图函数必须有为对应的参数
def aac(request,aa):
return HttpResponse('52199')
url(r'^aac/(?P<aa>[0-9]{1})/$', views.aac)
##URL反向解析
Model模型
- 创建mydb数据库
#create databases mydb;
- 在Django中配置数据库
修改setting.py文件中的DTTABASES 配置项
# DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'mydb',
'USER':'root',
'PASSWORD':'123456',
'HOST':'localhost',
'PORT':'3306',
}
- 告诉Django载客下来的MySQL操作中使用pymysql
打开mysite/_init_.py,写入以下代码(setting同级目录):
import pymysql
pymysql.install_as_MySQLdb()
开发流程
1.在models.py中定义模型类,继承models.Model
from django.db import models
#自定义模型
class User(models.Model):
username=models.CharField(max_length=50)
email=models.CharField(max_length=100)
age=models.IntegerField()
#方法
2把应用加入settings.Py文件的installed_app项
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'home',]
3生成迁移文件
#python3 manage.py makemigrations
- 执行迁移
#python3 manage.py migrate
- 使用模型进行curd操作
在视图函数中使用模型
- 视图函数中导入models
from.import models
def mod_user(request):
# 使用模型进行数据的查询
res = models.User.objects.all()
print(res)
#<QuerySet [<User: User object>]>
#zhangshan
for x in res:
print(x.username)
return HttpResponse('b.html')