1、电脑安装Python环境
2、Pycharm下载安装
3、创建Django项目,连接Mysql数据库
apps:集合包,包含每一个功能模块
migrations目录:存放提交数据库操作命令
__init__.py:初始化文件,标志我们的app可以被引用
apps.py:存放app信息
models.py:当前app所用到的数据表配置,数据库表的映射
adminx.py:连接数据库,使用xadmin管理后台上传数据到数据库
urls.py:页面路由配置
views.py:接口后台逻辑配置
eduproject:项目基础文件
settings.py:项目基础配置
urls.py:底层路由配置,连接到每一个app
extra_apps:存放额外的app文件
如xadmin先关文件
media:媒体文件
存入上传的动态文件
static:静态文件
js/css/img等
templates:前端模板文件
2、项目配置
(1)在settings.py中配置包括:
数据库配置
静态文件根目录配置
邮件配置
…
(2)在urls.py中配置路由情况
(3)分析页面,明确所需的数据表,在app下的models.py中配置
与此同时,对应在adminx.py中进行相对应的配置,便于管理后台向数据库添加数据
(4)静态文件导入static
(5)前端页面导入media,分析页面结构,总结公共模板
3、项目开发“三步走”
第一步:
在urls.py中编写路由
在views.py中编写接口,初步实现页面跳转
第二步:
按照django语法,根据创建出来的公共模板,修改页面正常展示
第三步:
完成页面相关功能实现(请求数据—>数据库查找—>返回数据—>数据按需展示)
4、通过前台页面操作数据(三步走)
前提:数据库连接成功,models.py文件配好
第一步:
前端获取数据,请求接口
ajax请求或表单请求
第二步:
编写forms.py文件,设置要操作的数据,制定校验规则
from django import forms
from .models import UserAsk, UserComment,UserProfile
from captcha.fields import CaptchaField
import re
#两种创建类的方式
class UserRegisterForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(required=True,min_length=3,max_length=15,error_messages={
'required':'密码必须填写',
'min_length':'密码不得小于3位',
'max_length':'密码不得大于15位'
})
captcha = CaptchaField(error_messages={
'invalid': '验证码错误'
})
#更改完数据可以直接进行保存
class UserAskForm(forms.ModelForm):
class Meta:
model = UserAsk
#使用字段较少的话可以单独列出来
#fields = ['name','phone','course']
#使用字段较多的话,可以将不需要的字段排除出去
exclude = ['add_time']
#如果用到了全部字段,可以用下面的方法
#fields = '__all__'
#添加自定义规则
def clean_phone(self):
#重新去cleaned_data中将需要的值给取出来
phone = self.cleaned_data['phone']
#建立正则对象
com = re.compile('^(((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(16[6])|(17[0135678])|(18[0-9])|(19[89]))\\d{8})$')
#如果有返回值,则表示验证成功
if com.match(phone):
return phone
else:
#验证失败
raise forms.ValidationError('手机号填写错误')
第三步:
配置后端接口,首先在urls.py中配置路由,然后在views.py中编写逻辑
#引入返给前端所需的配置
from django.shortcuts import render,HttpResponse,redirect,reverse
#引入表单校验类
from .forms import UserRegisterForm,UserLoginForm,UserForgetForm,UserResetForm,UserChangeImageForm,UserChangeInfoForm,UserChangeEmailForm,UserResetEmailForm
from .models import UserProfile,EmailVerifyCode
from django.db.models import Q
from django.contrib.auth import authenticate,login,logout
#引入自己封装好的方法
from tools.send_email_tool import send_email_code
#返给前端基本提示数据
from django.http import JsonResponse
#引入第三方所需插件
from datetime import datetime
#接口名
def register(request):
#判断请求方法
if request.method == 'GET':
user_register_form = UserRegisterForm()
#跳转到指定页面且返回数据
return render(request,'users/register.html',{
'user_register_form':user_register_form
})
else:
user_register_form = UserRegisterForm(request.POST)
#表单数据校验
if user_register_form.is_valid():
#获取请求数据
email = user_register_form.cleaned_data['email']
password = user_register_form.cleaned_data['password']
#查询数据
user_list = UserProfile.objects.filter(Q(username = email)|Q(email=email))
if user_list:
return render(request,'users/register.html',{
'msg':'用户已存在'
})
else:
#新增数据
a = UserProfile()
a.username = email
a.set_password(password)
a.email = email
a.save()
#发送邮箱验证码
send_email_code(email,1)
return HttpResponse('请尽快前往您的邮箱激活账户,否则无法登陆')
else:
return render(request,'users/register.html',{
'user_register_form':user_register_form
})
#修改头像
def user_change_image(request):
#request.FILES为上传的文件
#instance为需要改变的实例
user_change_image_form = UserChangeImageForm(request.POST,request.FILES,instance=request.user)
if user_change_image_form.is_valid():
#更改数据
user_change_image_form.save(commit=True)
return JsonResponse({'status':'ok'})
else:
return JsonResponse({'status': 'err'}