1创建虚拟环境
安装虚拟环境及创建项目
virtualenv --no-site-packages fresh_env8
cd fresh_env8
cd Scripts
source activate
pip install django
cd ..
cd pythonwork
django-admin startproject fresh_shop
在项目根文件夹下新建一个requirement.txt文档
在里面写入需要装的三方库的名字,一行一个
命令行中执行
pip install -r requirement.txt
将会安装txt文档中写的三方库
2在html文档里面指定路径和路由
2.1指定路径
html文档中跳转至指定文件夹下路径
指定方式一
{% load static %}
指定方式二
2.2指定路由
在html文档中跳转至指定路由
文章
3表单校验
让后端校验的数据错误类型在前端展现
先在后端传入错误信息,然后在显示错误信息的地方添加{{ errors.pwd }}
return render(request, 'register.html', {'errors': errors})
{{ errors.pwd }}
让一个字段的值参考另一个字段的值
让cate字段的值在CATE字段的值(为一个序列)中选择
cate = models.IntegerField(choices=CATE, verbose_name='类目级别')
4主页面
前端页面中没有中括号这些符号,都是以.链接;当要取一个序列中的第几个值时,也是以.代替中括号或者小括号
遍历后端传入的第一个列表,列表元素为小列表组成,小列表由一个对象和一个对象组成的列表构成
{% for data in result %}
遍历后端传入的另一个元祖,元祖由一系列小元祖组成
{% for type in category_type %}
如果小元祖的第一个值与小列表的第一个元素的category_type字段对应的值相等
{% if type.0 == data.0.category_type %}
前端展示小元祖的第二个元素
{{ type.1 }}
{% endif %}
{% endfor %}
{% endfor %}
解析小列表的第一个元素对应的文件地址(需要先在工程文件的路由下先导入media文件地址)
4.1登陆表单校验
form.py文件中先设置校验条件
表单校验中required=True表示在校验中此项必填
class LoginForm(forms.Form):
username = forms.CharField(max_length=20, min_length=5, required=True,
error_messages={'required': '用户名未填',
'max_length': '用户名最长20',
'min_length': '用户名最短为5'})
pwd = forms.CharField(max_length=20, min_length=8, required=True,
error_messages={'required': '密码未填',
'max_length': '密码最长20',
'min_length': '密码最短为8'})
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('pwd')
user = User.objects.filter(username=username).first()
if not user:
raise forms.ValidationError({'username': '该账号没有注册,请先注册'})
if not check_password(password, user.password):
raise forms.ValidationError({'pwd': '密码错误'})
return self.cleaned_data
views.py文件中引用校验
def login(request):
if request.method == 'GET':
return render(request, 'login.html')
if request.method == 'POST':
校验
form =LoginForm(request.POST)
if form.is_valid():
用户名存在,密码正确
username = form.cleaned_data.get('username')
user = User.objects.filter(username=username).first()
request.session['user_id'] = user.id
return HttpResponseRedirect(reverse('goods:index'))
else:
errors = form.errors
return render(request, 'login.html', {'errors': errors})
4.2注册表单校验
form.py中校验文件
class RegisterForm(forms.Form):
user_name = forms.CharField(max_length=20, min_length=5, required=True,
error_messages={'required': '用户名必填',
'max_length': '用户名最长20',
'min_length': '用户名最短为5'})
pwd = forms.CharField(max_length=20, min_length=8, required=True,
error_messages={'required': '密码必填',
'max_length': '密码最长20',
'min_length': '密码最短为8'})
cpwd = forms.CharField(max_length=20, min_length=8, required=True,
error_messages={'required': '密码必填',
'max_length': '密码最长20',
'min_length': '密码最短为8'})
email = forms.CharField(required=True, error_messages={'required': '邮箱必填'})
allow = forms.BooleanField(required=True, error_messages={'required': '必须同意用户协议'})
def clean_user_name(self):
校验注册的账号是否已存在
username = self.cleaned_data['user_name']
user = User.objects.filter(username=username).first()
if user:
raise forms.ValidationError('该账号已存在,请更换账号再注册')
return self.cleaned_data['user_name']
def clean(self):
校验密码是否一致
pwd = self.cleaned_data.get('pwd')
cpwd = self.cleaned_data.get('cpwd')
if pwd != cpwd:
raise forms.ValidationError({'cpwd': '两次密码不一致'})
return self.cleaned_data
def clean_email(self):
校验邮箱格式
email_reg = '^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.[a-zA-Z0-9]{2,6}$'
email = self.cleaned_data['email']
if not re.match(email_reg, email):
raise forms.ValidationError('邮箱格式错误')
return self.cleaned_data['email']
view中待校验文件
def register(request):
if request.method == 'GET':
return render(request, 'register.html')
if request.method == 'POST':
使用表单form做校验
form = RegisterForm(request.POST)
if form.is_valid():
账号不存在于数据库,密码和确认密码一致,邮箱格式正确
username = form.cleaned_data['user_name']
password = make_password(form.cleaned_data['pwd'])
email = form.cleaned_data['email']
User.objects.create(username=username,
password=password,
email=email,)
return HttpResponseRedirect(reverse('user:login'))
else:
不符合要求的情况
errors = form.errors
return render(request, 'register.html', {'errors': errors})