用户表拓展,表单验证,图片显示

  • 一、用户表拓展
    • 1.在users模块下的models.py 中
      • from django.contrib.auth.models  import  Abstractuser
      • class UserProfile(Abstractuser):
        • nick_name = models.Charfield(max_lenght=10,verbose_name='用户昵称')
        • def __str__(self):
          • return self.username
      • settings.py  中 添加  AUTH_USER_MODEL = 'users.UserProfile'#迁移同步时指向拓展的表   应用名.模型类名
    • 2.使用
      • 视图函数中 from django.contrib.auth import authenticate,logout,login
      • 1.可以通过 user = authenticate(username=username,password=password)    authenticate只验证username和password ,不能用Q,且django1.11 版本,自动验证is_alive 子段,如果为0,则用户名密码正确也会返回None
        • 判断该用户是否在用户表存在
      • 2.创建新用户
        • a = UserProfile()
        • a.username = username
        • a.set_password(password) #自动加密密码
        • a.save()
      • 3.login(request,user)  #登录用户
        • logout(request)  #退出用户
      • 4.前端判断用户是否登录 {% if request.user.is_authenticated %}  True 为登录状态
      • 如果自己建立的模型类需要被拓展,在class Meta  中  添加 abstract = True
  • 二、图片显示
    • 1.setting.py  中配置
      • MEDIA_URL = '/static/media/'
      • MEDIA_ROOT = os.path.join(BASE_DIR,'static/media')  配置媒体文件访问路径
      • TEMPLATES 中 'context_processors' 列表中添加媒体模板处理器  'django.template.context_processors.media'
    • 2.主路由中
      • from .settings import MEDIA_ROOT
      • from django.views.static import serve
      • url(r'static/media/(?<path>.*)',serve,{'document_root':MEDIA_ROOT})、
    • 3.
      • 图片字段
      • ImageField(upload_to='article/%y/%m/%d')  选择文件后将以此递归文件格式上传至 static/media 文件夹中
      • html 页面 可以通过 <img src='{{MEDIA_URL}}{{模型数据对象.图片字段}}'>   展示图片在页面上
  • 三、表单验证
    • 1.在app 文件夹下创建forms.py
    • 2.from django import forms
      • class UserRegisterForm(forms.Form):
        • username = form.CharField(max_lenght=20,min_length=5,required=True,error_messages={
        • 'max_length':'用户名太长',
        • 'min_length':'用户名太短',
        • 'required':'用户名不能为空',
        • })
      • username  必须和html 页面的name 属性值 相同
      • required  表示该项不能为空
    • 3.views.py 中
      • user_register_form = UserRegisterForm(request.POST)  #当表单里有文件时,参数加上 request.FILES
      • if user_register_form.is_valid():   判断是否合法
        • username = user_register_form.cleaned_data['username']    #拿到合法的数据
      • ....
      • else:  #不和法返回错误消息
        • #  返回  user_register_form
        • return  render(request,'html',user_register_form)
    • 4.前端打印错误消息
      • {% for key,err in user_register_form.errors.items %}
        • {{ err }}
      • {% endfor %}
    • 5.使用模型类的约束来进行表单验证
      • class UserAskForm(forms.ModelForm):
        • class Meta:
          • model = UserAskInfo    -->模型类
          • fields = '__all__'  --表单验证全部字段,默认每一项为必填
          • fields = ['字段','字段']  可以指定验证的字段
          • exclude = ['字段']  也可以指定不验证的字段
        • def clean_字段(self): #拓展字段的验证
          • phone = self.cleaned.data['字段']
          • com = re.complie('正则')
          • if com.match(phone):
            • return phone
          • else:
            • raise forms.ValidationError('手机验证不合法')
      • 在视图函数中
        • user_ask_form = UserAskForm(request.POST)
        • if user_ask_form.is_valid():
          • user_ask_form.save(commit=True)  #直接保存在对应的模型类中
      • 使用modelform 验证时,当需要指定保存数据到登录用户的资料中
      • user_ask_form = UserAskForm(request.POST,instance=request.user)

猜你喜欢

转载自blog.csdn.net/qq_41654985/article/details/80927440