一.安装django
二.创建django
命令行创建 django-admin stratproject mysite
pychram创建
三.django运行
命令行运行python manage.py runserver
pycharm运行django项目
1.在设置启用支持django
2.编辑配置
3.完成设置
4.运行
四.django app
1.概念
在 Django 中,App(应用) 是项目的核心组织单元,它是一个可重用的模块化组件,专注于实现某个特定的功能或业务逻辑。比如常见的App类型,如用户管理、商品展示、订单处理等。这能让用户更直观地理解App的应用场景。
2.创建单个app
创建app命令行 cd 项目 python manage.py startapp web
创建多个app
先建立一个apps目录
然后在apps里创建app目录
最后命令行 python manage.py startapp spider apps/spider ga
在apps把name = 'spider'改为name = 'apps.spider',项目同目录下的app则不用改
url和视图函数结合,一般url里的函数写在app里的视图里面,在由urls路由进行调用
五.路由系统
1.概念
路由系统的主要功能是解析用户请求的 URL,并根据预定义的规则将请求转发到相应的视图处理逻辑。它决定了用户访问某个 URL 时应该执行什么代码。
2.传统写法
匹配动态整型数字
匹配路径
匹配字符串
获得url字符串参数
3.正则写法
匹配数字字符串
匹配数字和字母字符串
匹配的两个格式
4.路由include分发
Django 的路由分发机制将用户请求的 URL 地址与后端的视图函数或类视图进行关联。当用户访问某个 URL 时,Django 会根据路由配置找到对应的视图逻辑来处理请求,并返回相应的响应内容。
1.导入相应的库
2.分发
3.在spiderapp目录创建urls.py
4.在在spider目录下views定义函数
5.在在spider目录下urls配置路由
6.访问成功,访问路径/spider/text9
六.视图系统
1.概念
在 Django 中,视图(View)是处理用户请求并返回响应的核心组件。视图的作用是接收用户的 HTTP 请求,处理请求数据(如参数、表单数据等),执行相应的业务逻辑,最终返回一个 HTTP 响应(如 HTML 页面、JSON 数据等)。
2.request对象
request是一个对象,包含请求相关所以东西,比如url,方式,url参数,请求体等
3.重定向
4.模板配置
在setting文件里配置
一般首先在根目录下的templates寻找,一般放公共的
一般来说在哪个app里就注册哪个模板,哪个业务放哪个app,如果单个app并且在项目同目录下则
直接web.apps.WebConfig
url定义,记住是render,不是重定向redirect
写html,别名用来跳转
配置路由
.
完成
5.响应体
定义响应头,前后端,跨域什么需要到
定义响应cookie
6.FBV(函数形式写)CBV(类形式写,前后端分离)
CBV
7.静态文件
在setting配置,设置优先在根目录的static找
STATICFILES_DIRS = (os.path.join(BASE_DIR,'static') ,)
媒
体文件显示,在url.py
+static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
七.模板
1.模板语法
函数传参到html,参数必须为字典
4
注意,在script里,传参除了数字其他要加''.
举例个例子爬取网易云热门音乐标题集成在web环境里
请求用xpath提取标题,然后导入字典里,在传给html
<ul>
{% for i in arr %}
<li>{
{ i }}</li>
{% endfor %}
</ul>
效果如下:
对于字典里的字典进行集成web环境
则:爬起数据封装成字典注意字典套用字典
然后对前端页面进行优化
<ul>
{% for k,v in dictt.items %}
<li><a href={
{ v }}>{
{ k }}</a></li>
{% endfor %}
</ul>
最后结果
2.模板的继承
待更新
3.自定义模板
待更新
八.中间件
概念:
中间件有两种,一种请求中间件,例如:在请求到达视图之前,中间件可以检查用户是否已经登录,或者验证用户的权限。一种是响应中间件,例如:响应中间件可以统一设置响应头,例如设置 Content-Type
、Cache-Control
等,而无需在每个视图中重复设置。
1.原始方式
手动创建中间件
在setting设置中间件
请求经过call方法,get_response(request)
class myweb(object):
def __init__(self,get_response):
self.get_response = get_response
def __call__(self, request):
#进来前
print(1)
response = self.get_response(request)
print(2)
#进来后
return response
视图输出3
测试最终结果
2.源码建议
from django.utils.deprecation import MiddlewareMixin
class myweb(MiddlewareMixin):
def process_request(self, request):
pass
def process_response(self, request, response):
pass
中间件流程
设置多个中间件,然后先后setting一一注册
最终顺序,中间件执行顺序结构是栈,先进后出。
3.process_views,路由匹配成功执行
def process_view(self, request,view_func,view_args,view_kwargs):
print(request,view_func)
4.process_exception,捕获视图异常
def process_exception(self, request, exception):
print(exception)
return HttpResponse('异常了')
九.ORM(关系对象映射)
1.概念
是一种编程技术,用于将面向对象编程语言中的对象与关系型数据库中的表结构进行映射。它允许开发者通过操作对象的方式来操作数据库,而无需直接编写SQL语句,从而简化了数据库的交互过程。简单来说,提高开发效率,降低运行效率。
2.基本操作:
在app里的modedels.py,编写类,然后在setting里注册app
from django.db import models
#表名称app名字加_UserInfo,会自己设置id,自增长,主键
class UserInfo(models.Model):
#字符串
name = models.CharField(max_length=16)
#整型
age = models.IntegerField()
django根据在models中类生成一个对数据库操作配置文件
python manage.py makemigrations
会在app下的migrations生成一个配置文件
内容如下:会自己生成id,自增长,主键。名称是UserInfo,
再通过命令转换为sql语句,生成表,更新表,链接数据库
python manage.py migrate
在setting默认配置,默认连接在django下的sqlite3数据库
生成表
生成日志
要是不删掉字段,可以注释掉,在执行上面两命令。
要是增加字段,此时表里有数据,则需要增加默认值
约束:
gender_choices=((0,"女"),(1,'男'))
gender = models.SmallIntegerField(choices=gender_choices)
3.连接mysql。
django无法创建数据库,需要自己创建。
前提:pip install mysqlclient
然后再项目目录下setting.py配置
DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
'default': {
'ENGINE': 'django.db.backends.mysql', # 默认
'NAME': 'django_demo', # 连接的数据库
'HOST': '127.0.0.1', # mysql的ip地址
'PORT': 3306,
'USER': 'root',
'PASSWORD': '123456' # mysql的密码
}
}
4.字段
verbose_name 注释
CharField 字符串
IntegerField 数字
default 默认
class UserInfo(models.Model):
'''用户表'''
#字符串
User_name = models.CharField(verbose_name='用户名',max_length=16)
#整型
password = models.CharField(max_length=32)
#手机号码
telephone = models.CharField(max_length=16)
#年龄
age = models.IntegerField(default=0)
5.增删改查
在视图函数里写
def text1(request):
UserInfo.objects.create(User_name='xch',password='123',age=12,telephone='123')
return HttpResponse('欢迎使用')
增删查改所有操作
def text1(request):
#增加数据
UserInfo.objects.create(User_name='xch',password='123',age=12,telephone='123')
#删除数据 ,条件
UserInfo.objects.filter(age=0).delete()
#删除所有数据据
UserInfo.objects.all().delete()
#获取所有数据,一般用于渲染前端页面
data_list = UserInfo.objects.all()#对象
for data in data_list:
print(data.User_name,data.password,data.age,data.telephone)
#获取符合条件第一条数据
first_data = UserInfo.objects.filter(id=1).first()
#更新数据符合条件更新
UserInfo.objects.filter(id=2).update(User_name='xch',password='<PASSWORD>',age=12,telephone='123')
# #全部更新
UserInfo.objects.update(User_name='xch',password='<PASSWORD>',age=12,telephone='123')
return HttpResponse('欢迎使用')
十.案例
案例一:数据库渲染到前端
1.先创建一张表,导入模块,设置路由与url对应
2.通过deepseek生成html
3.在数据库插入数据
4.传入数据
效果如下:
案例二:添加数据
加cursor生成一个相关联的页面 (cursor在手,天下我有)
2.其它步骤同上。添加跳转
3.form标签加‘post’,给输入的数据起别名
由post.get(获取数据)并保存数据
效果如下:
案例三 删除
1.通过id删除,新增视图和url对于关系
效果如下:
案例四:修改编辑
设置默认值
因为form提交方式为post,所以一开始访问为get方式,把原有属性传上去
提交方式为post
就重定向到原页面,效果如下