Django基础

Django基础

1.注册app

在settings.py文件下INSTALLED_APPS,加入生成的app配置

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app_01.apps.App01Config'
]

2.配置数据库相关

安装第三方模块

pip install mysqlclient

在mysql中创建个数据库

create database django_data

在settings.py文件下配置数据库

1
2
3
4
5
6
7
8
9
10
DATABASES ={
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME':'django_data',
'USER':'root',
'PASSWORD':'123456',
'HOST':'127.0.0.1',
'PORT':'3306'
}
}

3.数据库模型创建

在app的models.py中编写数据库结构

1
2
3
4
5
6
7
8
9
10
11
12
13
class UserInfo(models.Model):
id = models.IntegerField(verbose_name="id",primary_key=True)
name = models.CharField(verbose_name="姓名",max_length=128)
# 约束
gender_choicse = (
(1,"男"),
(2,"女")
)
gender = models.SmallIntegerField(verbose_name="性别",choices=gender_choicse)
password = models.CharField(verbose_name="密码",max_length=128)
age = models.IntegerField(verbose_name="年龄")
account = models.DecimalField(verbose_name="账户余额",max_digits=32,decimal_places=2,default=0)
create_time = models.DateTimeField(verbose_name="创建时间")

执行创建命令

python manage.py makemigrations

python manage.py migrate

或者可以用django默认的sqlite3文件数据库,在settings.py文件下的,使用这个数据库的话会创建一个db.sqlite3文件存在本地,数据都存在这个文件中。

1
2
3
4
5
6
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}

4.路由

在urls.py文件中,将路由和视图函数创建对应关系

1
2
3
4
5
6
7
8
from django.contrib import admin
from django.urls import path
from app_01.views import index,depart,perttynum,user,login,task
urlpatterns = [
path('admin/', admin.site.urls),
path('',index.index),
path('user_list/', user.user_list),
]

5.视图

在views.py文件中,编写业务逻辑,也可以创建view文件夹,再创建各自的py文件,分文件管理各自的页面功能

1
2
3
4
5
6
7
8
9
10
from django.shortcuts import render,redirect,HttpResponse
from app_01 import models
from django import forms


def user_list(request):
# 用户列表
data = models.UserInfo.objects.all()
return render(request, "user/user_list.html", {"data":data})

6.模板

在templates目录,编写HTML模板

可以使用相关的模板语法,继承

7.ModelForm 和Form组件

在做增删改查的过程使用这个

在登录过程中记录用户信息

1
request.session["info"]={"id":data_password.id,"username":data_password.name}

设置Session过期的时间,单位时间秒

1
request.session.set_expiry(60*60*24)

清空Session

1
request.session.clear()

9.中间件

中间件发生在视图函数获取到用户请求之前和之后,可以利用中间件实现用户认证,限制用户访问权限

创建中间件auth.py

1
2
3
4
5
6
7
8
9
10
11
12
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import redirect
class M1(MiddlewareMixin):
"中间件"
def process_request(self,request):
if(request.path not in ["/login/","/img_code/"]):
info = request.session.get("info")
if not info:
return redirect('/login')

def process_response(self,request,response):
return response

注册中间件,在settings的MIDDLEWARE

1
2
3
4
5
6
7
8
9
10
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
"app_01.middleware.auth.M1"
]

10.ORM

获取全部数据

1
2
3
from app_01 import models

models.UserInfo.objects.all()

字段查询

1
models.UserInfo.objects.filter(name=query_data["username"])

这么查询的结果是一个列表,可以使用first()函数获取首个,或者[0]

1
models.UserInfo.objects.filter(name=query_data["username"]).first()

使用order_by函数可以进行排序

1
models.UserInfo.objects.filter(id=id).order_by("id")

创建

1
models.UserInfo.objects.create(name="new_name")

删除

1
models.UserInfo.objects.filter(id=id).delete()

更新

1
models.UserInfo.objects.filter(id=id).update(name="new_name")