提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
由于最近要学习Django框架,并且最近一段时间内都会用到它。
就决定做个学习记录吧
个人记录,理解有限,不足之处还请包含和指出。
一、Django介绍
Django用于python的web项目搭建,MTV设计模式
Model: 模型层,负责与数据库交互
Template: 模板层,也就是所谓的前端,负责把页面展示给用户,里面主要存放HTML文件
View:视图层,负责业务逻辑,在适当的时候调用Model和Template两层。
常用命令:python manage.py startapp XXXX
建立应用XXXXpython manage.py makemigrations
记录models.py的所有改动,并且将这个改动迁移到migrations这个文件下生成一个文件例如:0001文件python manage.py migrate
主要作用就是把对models的改动作用到数据库,也就是执行migrations里面新改动的迁移文件更新数据库python manage.py runserver
运行
二、Django框架搭建
1.安装Dajngo
在pycharm的终端输入命令pip install django
然后输入命令python -m django --version
查看版本
2.创建项目
django项目创建有两个方法:
1.在对应文件夹下进入cmd
输入django-admin startproject XXXX
(XXXX为对应项目名)
2.用pycharm直接创建
三、结构介绍
1、初始文件介绍
初始界面为一个和项目名字相同的包
包内有四个文件夹
settings.py内是基础的配置信息,
在DATABASES中有配置数据库信息,默认配置sqllite数据库;
在ALLOWED_HOSTS中可以添加想增加的host
url.py中存的是页面地址配置信息
2、运行
在终端输入python manage.py runserver
运行Dajngo服务器
一般默认地址是127.0.0.1(有时需要在host中添加)
四、Url
4.1使用介绍
Django的页面配置是在主文件中的urls.py中的urlpatterns下配置,通过添加path(),来添加页面,例如 path(‘sales/orders/’, listener), listener是该对应url的处理函数,不能带(),因为不需要获得它的值
当需要配置的url过多时,可通过以下几种方法简化:
1.使用include()函数
在其他包内建立子url配置文件,通过include指定
例如:path('sales/', include('sales.urls')),
子url配置文件格式与主文件相同
urlpatterns = [
path('orders/', views.listorders),
]
2.使用转换器:<转换器类型:自定义名>,例如 path('orders/<int:page>', views.listorders),
输入orders/100后,会自动跳转到处理函数,同时处理函数定义的page值接受100
3.re_path(),可使用正则表达式配置(比较麻烦)
4.2反向解析
url 反向解析是指在视图或模板中,用path定义的名称来动态查找或计算出响应的路由
例如:path(route, views, name=“XXXX”)
然后在模板中反向解析
{% url ‘XXXX’ %}
{% url ‘XXXX’ ‘value1’ ‘value2’%}
例如
{% url ‘student’ age=‘18’ name=‘zhangsan’ %}
五、View
前端的数据经过url文件的转发后,传到view的文件中,该文件主要包含的处理函数,用来处理数据
def listener(request):
return HttpResponse("hello world")
request中存放的是前端传来的数据
数据类型主要分为GET和POST类型(和其他类型,目前没学到)
GET请求类型主要有:
1.浏览器地址后的值,例如:localhost:8000/xxxx/?username=1
2.form表单
POST请求类型主要有"
1.大量数据、隐私数据
2.form表单
最好通过request.GET.get(“c”,None)方法获取值,字典类型,若值为空,取None
POST请求中包含csrf验证,该验证是防止不合法的输入,初学时可以先解除
通过Setting.py中的配置信息 注解了就行了
MIDDLEWARE = [
*
*
'django.middleware.csrf.CsrfViewMiddleware',
*
*
]
HttpResponse(响应体(回传内容),响应体数据类型(默认是text/html),status状态码(200.404之类的。默认200(ok)))回传想在页面上显示的数据,响应体中可以是String字符串,也可以是界面
六、template
模型层主要存放html页面,template需要配置:
1.配置
1.先建好一个包template
2.在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',
],
},
},
]
一般都是默认的,只有‘DIRS’中需要写好template包的路径
3.在template中创建HTML文件
4.在view中配置:
一般使用render:
from django.shortcuts import render
def test_templates(request):
dir={1:1,2:2}
return render(request,'test_tes.html',dir)
函数render(request,html页面,字典),可用于让前端获得字典值,通过{{ dir.key }}获取,可以使用locals()方法实现对该函数的所有属性实现自动封装。
2.使用
html页面有以下使用方法:
1.逻辑判断
<% if x==1 %>
命令
<% endif %>
2.过滤器
{{参数|lower}}
lower | 字符串转为小写 |
---|---|
upper | 字符串大写 |
safe | 不转义 |
add:‘n’ | 将value值增加n |
3.继承父页面
继承:
{% extends “XXX.html” %}
重写:
夫模块中要先定义可修改的block
{% block XXXX %}
子模块覆盖父模块中的XXX的内容
{% endblock XXXX %}
3、静态资源文件配置
在setting.py里配置路径
STATIC_URL = '/static/'
STATICFILES_DIRS=(os.path.join(BASE_DIR,"static"),)
然后通过{% static %}标签访问
1.加载static {%load static %}
2.使用静态资源{% static ‘url’ %}
<img src="{% static 'image/le.jpg'%}">
七、model
1、配置
sqllite数据库不多赘述,主要介绍mysql的配置
1.找到Setting文件,配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1', # 要连接的数据库ip
'PORT': '3306', # 数据库连接端口,一般默认为3306
'NAME': 'XXXX', # 已经存在的数据库名称
'USER': 'root', # 用户名
'PASSWORD': 'XXXX', # 用户密码
}
2.找到__init__.py文件,配置
import pymysql
pymysql.install_as_MySQLdb()
3.登记模块
在setting文件中登记:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'demo'#自己新建的模块
]
2、建立映射
2.1、django建立数据库表
在models.py文件中创建类,该类继承models.Models的父类,类名与数据库表名对应,思想类似于面向对象。
参数定义参照下面方法:
class Student(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=45, blank=True, null=True)
age = models.IntegerField(blank=True, null=True)
grade = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'student'
Meta的内部类是用于自命名数据库表,Django默认建表格式:模块名_类名
然后执行python manage.py makemigrations XXXX
python manage.py migrate
注意:此方法会把Django中默认的自带的表也导入数据库
2.2、数据库表导入Django
一般情况下我们已经建好了数据库表
这时只需使用以下方法自动导入python manage.py inspectdb (表名)> app名/models.py
3、使用
在view里调用该类的objects获取对象
sql=Student.objects.all()`
方法介绍
1.增
1.1、使用.objects.create()
Student.objects.create(id=,name='abc',age=1,grade=250)
1.2、使用save()
2.查
all() | 查询所有,返回QuerySet(结构是元组里存放字典) |
---|---|
get() | 单一 |
filter() | 查询符合的多条记录 |
exclude() | 除了条件的多条记录 |
values(‘XXXX’,“XXXX”) | 等同于 select A,B from 表 |
__exact:等值匹配
XX.objects.filter(id__exact=1)#select * from XX where id=1
__contains:包含特定值 模糊查询
__startwith:以XXX开始
__endwith:以XXX结束
XX.objects.filter(name__contains="w")#select * from XX where name like'%w%'
__gt(e):大于(等于)特定值、__lt:小于于特定值
XX.objects.filter(id__gt=1)#select * from XX where id>1
3、改
单值修改:
首先用get()获得值,然后修改
student=Student.objects.get(id=1)
student.update(grade=250)
多值修改:
students=Student.objects.all()
students.update(age=18)#都设成18
4.删
同修改一样 .delete()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。