.Python下有许多款不同的 Web 框架。Django是重量级选手中最有代表性的一位。许多成功的网站和APP都基于Django。轻量级可以用flask。
Django采用了MVC的软件设计模式,即模型M,视图V和控制器C。
原来没有控制层,页面需要写python,所以出了mvc。但是增加了代码量,代码清晰了。
python是mvt。 models写实体类,例如学生类 ,创建十个数据库学生表 views写定义方法,验证 templates写静态页面,js
思路:例如注册,前端提交数据(TEMPLATES),python定义方法进行验证是否注册,定义sql语句,提交数据库保存(views---控制层,里面业务逻辑很多,思路清晰),成功后,可能跳转别的页面,urls是定义路径,贯穿起来。
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
pip list查找所装的所有软件
__init__.py
:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。settings.py
:Django 项目的配置文件。中间件,APP,数据库,根路径,静态文件,指定启动wsgi。urls.py
:Django 项目的 URL 声明,就像你网站的“目录”,路径跳转。wsgi.py
:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。
ROOT_URLCONF = 'blog1.urls' #根路径
app也需要创建urls
TEMPLATES 模板
一个项目(总的),可以做多个APP(分支),多个模块。
DEBUG设置为False时的状态:
urls django2.0用path,1.8用url,里面是正则表达式
1.8:
urlpatterns = [
url('^admin/d{1,3}$', admin.site.urls),
]
2.0:
urlpatterns = [
path('admin/<int:id>', admin.site.urls),
]
编辑博客:http://write.blog.csdn.net/postedit/79732375 协议/域名/项目名称/参数
查看博客:https://blog.csdn.net/GAOSHIQI5322688/article/details/79732375 协议/域名/项目名称/目录/目录/参数
https://传输协议,是加密的,比较安全
http://超文本传输协议
www.baidu.com:80 域名/主机名/ip地址:端口 网站默认端口号80 省略
剩下的URI统一资源标识符
python.exe sdk 标准开发工具箱 java 叫 jdk
pycharm ide集成开发环境
映射:创建url,后台跳转前台
path('regist',views.regist)#请求路径,调用函数响应
from django.urls import path,include#根路径下导入include,
path('polls/', include('polls.urls')),#只能引用polls下的urls
后台数据显示到前台步骤:页面先找根路径下的APP路径,APP路径再找后台
1.后台
from django.shortcuts import render from django.http import HttpResponse #导入响应模块 # Create your views here.
def index(resquest):#请求只能响应一次 #return HttpResponse('hello world!') #没说跳转哪个页面,相当于document.write return render(resquest,'ok.html')#跳转页面,需要在templates建立html
2.APP路径
from django.urls import path from . import views urlpatterns = [ path('', views.HttpResponse), #请求路径,调用函数响应 ]
3.根目录经下制定我们创建的polls.urls
from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('mysite/',include('polls.urls')#只能引用polls下的urls ]
页面带参数,带到后台
ME2/Sites/dirmod.asp?sid=&type=gen&mod=Core+Pages&gid=A6CD4967199A42D9B65B1B ---------get提交,地址栏,超链接方式提交
/newsarchive/<year>/<month>/ -------------改成这样,方便 rest风格,get提交
步骤:需要改的地方
1.def index(resquest,id):#请求只能响应一次
print(id)
#return HttpResponse('hello world!') #没说跳转哪个页面,相当于document.write return render(resquest,'ok.html')#跳转页面,需要在templates建立html2.
urlpatterns = [
path('<int:id>', views.HttpResponse), #请求路径,调用函数响应
]
3,添加参数
http://127.0.0.1:8000/polls/1
4.刷新
地址栏访问是get请求
forbidden 是缺少token ,因为网页代码不安全,表单都能看到,所以加
POST方式步骤:
1.制作表单
<form action="" method="post"> {% csrf_token %}#安全 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="pwd"><br> <input type="submit" value="注册"> </form>
2.后台
#先是地址栏get请求,返回注册或登录页面,输完信息,注册是post请求,所以在执行下面
def login(request): if request.method=='GET': return render(request,'regist.html') else: uname=request.POST.get('username') pwd=request.POST.get('pwd') print(uname)
print(pwd)
return render(request,'suc.html')
3.路径
path('regist',views.regist)
4.地址栏搜索 blog/regist
快捷键:Ctrl+F 当前页面查找相同内容
连接数据库:
1.settings 配置
设置数据库
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME':'myschool', 'USER':'root', 'PASSWORD':'5322688', 'HOST':'127.0.0.1', } }
2.medel.py 写类
django里面使用了ORM(object relation mapping)对象关系映射模型,将页面数据和数据库表一一对应
class BlogUser(models.Model):#继承model.Model save、update userName=models.CharField(max_length=20,null=False,unique=True) pwd=models.CharField(max_length=20,null=False) class Meta:#创建内部类,不需要前缀 db_table='bloguser'
3.将实体类生成到数据库表
tools-->run...
makemigration blog #在控制台生成0001,知道了内容,数据库里还没有表
migrat blog 0001 #从控制台到数据库迁移,数据库有表 或者sqlmigrate blog 0001
4.views
from .models import * #导入当前models模块里的所有
def regist(request): if request.method=='GET': return render(request,'regist.html') else: uname=request.POST.get('username') pwd=request.POST.get('pwd') bloguser=BlogUser() #创建类对象 bloguser.userName=uname #将uname赋值给对象属性 bloguser.pwd=pwdbloguser.save() #保存数据库,不用写sql语句 return render(request,'suc.html')
5.执行