- 一、用户表拓展
- 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.在users模块下的models.py 中
- 二、图片显示
- 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.setting.py 中配置
- 三、表单验证
- 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 表示该项不能为空
- class UserRegisterForm(forms.Form):
- 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 %}
- {% for key,err in user_register_form.errors.items %}
- 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('手机验证不合法')
- class Meta:
- 在视图函数中
- 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)
- class UserAskForm(forms.ModelForm):
django 用户表拓展,表单验证,图片显示
最新推荐文章于 2021-11-16 10:16:31 发布