Django部分总结

  1. 中间件:中间件是 Django 请求/响应处理的钩子框架。它是一个轻量级的、低级的“插件”系统,用于全局改变 Django 的输入或输出。

四个方法:
from django.utils.deprecation import  MiddlewareMixin 引入MiddlewareMixin 
from django.shortcuts import HttpResponse
class Md1(MiddlewareMixin):
    def process_request(self,request):
        print("mdl process",id(request))在视图之前执行
    def process_response(self,request,response):
    基于请求响应
        print('mdl resonpes',id(request))在视图之后执行
        return response
    def process_view(self,request,view_func,view_args,view_kawargs):
        print("mdl view",id(request))在视图之前,顺序执行
    def process_exception(self,request,exception):视图函数错误,才会触发这个方法
        print('md1 exception')返回错误信息
        return HttpResponse('服务器错误')

在settings文件中引入该应用模型类

2.后台管理:

 模型中:
class Cloos(models.Model):
    con_name=models.CharField(max_length=20,verbose_name='班级号')在字段中添加ver_bose_name字段来设置汉语名称
    mark=models.CharField(max_length=10,verbose_name='班费')
    cla_id=models.CharField(max_length=20,verbose_name='教室号')
    class Meta:
        verbose_name_plural='班级表'
class Student(models.Model):
    name=models.CharField(max_length=20,verbose_name='姓名')
    arg=models.CharField(max_length=10,verbose_name='年龄')
    cloos=models.ForeignKey(Cloos,on_delete=models.CASCADE,verbose_name='班级')
    dian=models.CharField(max_length=30,verbose_name='电话')
    img=models.ImageField(upload_to='static',verbose_name='头像')
    class Meta:
        verbose_name_plural='学生表'
    def __str__(self):
        return self.name
admin文件中:
引入模型类
from .models import Cloos,Student
@admin.register(Cloos)运用@admin.register(表名)方法来设置模型类
class Classa(admin.ModelAdmin):
    list_display = ('con_name','mark','cla_id')显示字段
    fields = ('con_name','mark','cla_id')修改,添加,字段
@admin.register(Student)
class Studen(admin.ModelAdmin):
    list_display = ('name','arg','cloos','dian','img')
    fields = ('name','arg','cloos','dian','img')
apps文件中:
class SmanageConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'smanage'
    verbose_name='学生管理系统'设置verbose_name来设置后台系统名称

  1. 从而实现后台管理页面的汉化应用

 3.表单组件Form的使用:

创建一个包,建立一个py文件,在文件中:

from django import forms  引入forms


class Studentil(forms.Form):
    name=forms.CharField(label='姓名',required=False)设置label用于命名
    content=forms.CharField(label='内容',widget=forms.Textarea)
    phone=forms.CharField(label='电话')

 在URLs中添加路由,在后面添加上as_view()

在views视图函数中

from .studente.studenr import Studentil,Feekmodel引入该包文件中的类
class FeedBackViews(View):
    def get(self,request):
        stnd=Studentil()命名该类

        return render(request,'studw.html',{'stnd':stnd})在页面中传输该类
    def post(self,request):
        stutd=Studentil(request.POST)用该类接受post传来的数据
        if stutd.is_valid():判断该数据是否合乎规矩
            data=stutd.cleaned_data接取数据
            Studen.objects.create(**data)添加数据,需应用模型类

        else:
            # return HttpResponse('数据不合法')
            return render(request, 'studw.html', {'stnd': stutd})
        return HttpResponse('反馈成功!!')

网页中:

form action="" method="post">
    {% csrf_token %}
     {{ stnd.as_p }}as_p设置类型
    <br>
    <input type="submit" value="添加">
</form>

在form标签中只需加一个input提交和该类命名的变量就可代替添加input列

4.表单高级组件ModelForm的使用

在文件中引入模型类,创建一个类添加forms.ModelForm 

命名该模型类,运用fields添加现实的属性列

在views文件中:

from .studente.studenr import Studentil,Feekmodel
class FeedBackViews(View):
    def get(self,request):
        stnd=Feekmodel()

        return render(request,'studw.html',{'stnd':stnd})
    def post(self,request):
        stutd=Feekmodel(request.POST)
        if stutd.is_valid():
            data=stutd.cleaned_data
            Studen.objects.create(**data)

        else:
            # return HttpResponse('数据不合法')
            return render(request, 'studw.html', {'stnd': stutd})
        return HttpResponse('反馈成功!!')

操作基本与form相同

限值操作

def clean_name(self):clean加属性名设置属性判定方法
        if len(self.cleaned_data['name']) < 2:通过self.cleaned_data来进行获取数据来进行限制操作
            raise forms.ValidationError('————不能少于两个字————')在页面中提醒错误词

        return self.cleaned_data['name']
def clean_content(self):
        if len(self.cleaned_data['content']) < 6:
            raise forms.ValidationError('————不能少于六个字————')

        return self.cleaned_data['content']
def clean_phone(self):
        if len(self.cleaned_data['phone']) != 11 :
            raise forms.ValidationError('————必须11个字————')

        return self.cleaned_data['phone']

5.注册登录:

注册:

def user(request):
    if request.method=='GET':
        return render(request,'user.html')
    if request.method=='POST':
        username=request.POST.get('username')
        password=request.POST.get('password')
        email=request.POST.get('email')
        User.objects.create_user(username=username,password=password,email=email)
        return redirect('sman:userd')

注册与普通的orm添加差不多,插入到自带的user中,要在create添加——user创建一般用户,create_superuser -- 创建一个超级用户, 用户名+ 密码 , 创建超级最后用户要添加 邮箱,create创建普通用户

登录:

def userd(request):
    if request.method=='GET':
        return render(request,'userd.html',{'request':request})
    if request.method=='POST':
        username=request.POST.get('username')
        password=request.POST.get('password')
        user=authenticate(request=request,username=username,password=password)
        if user is not None:
            login(request=request,user=user)
            return redirect('sman:index')
        return redirect('sman:userd')

登录,在视图函数中接收到页面的数据之后,引入authenticate,使用authenticate进行数据验证,

如果通过就用login进行记录,下次进入就会根据记录进行进入

账号注销:

def logou(request):
    logout(request=request)
    return redirect('sman:userd')

引入logout来进行账号的注销

6.文件上传

上传图片:

在模型类中添加一个ImgeField类型的字段,其中upload_to=用来设置图片存入的位置

 

 在网页中form标签添加 enctype="multipart/form-data"属性,在图片的输入框用file类型,进行网页向视图函数的传输,

 存入orm后,图片列就会存入位置名称/图片的名称。

第二种方法:

在模型类中,添加CharField类型字段,进行图片的存储,网页中与第一种方法一样。

 

不过,在视图函数中 运用写入文件的方式进行存储。

7.orm:

简介

ORM:关系对象映射。定义一个类自动生成数据库的表结构。

创建数据库的时候,一般有以下几种常用数据类型:数字、字符串以及时间。

ORM分为两种:

DB First 数据库里先创建数据库表结构,根据表结构生成类,根据类操作数据库
Code First 先写代码,执行代码创建数据库表结构
主流的orm都是code first。django 的orm也是code first,所以学的时候,本质就分为两块:

根据类自动创建数据库表
根据类对数据库表中的数据进行各种操作

在models文件中创建模型类:

模型类创建完成后,执行下列命令:

从而生成orm数据库

进行添加数据:

 删除数据:

展示数据:

 

更新数据:

 

 

 

 

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值