Django笔记

1.新建环境
2.配置mysql
3.运行manage.py makemaigrations,migrate 生成数据表
4.创建users app
5.定义users moudles
6.在users moudles中用到了image,需要pillow,所以pip安装它
7.把users注册到INSTALLED_APPS,并在settings中重载方法AUTH_USER_MODEL = 'users.UserProfile'
8.makemigrations users,migrate users
9.startapp courses ,给moudels增添内容
10.startapp organization,给moudels增添内容

  1. startapp operation,给moudels增添内容
    12.注册 'courses','organization','operation'
    13.makemigrations,migrate
    14.创建apps python package,并把四个app拖动到这里面来
    15.把apps mark 为source root
    16.把apps 增加到搜索目录下 sys.path.insert(0,os.path.join(BASE_DIR,'apps'))
    17.在cmd下测试是否可正常运行 python manage.py runserver 0.0.0.0:8000
    后台管理系统
    特点
    1.权限管理
    2.少前端样式
    3.快速开发

1.新建超级用户 createsuperuser
jeff
admin123
2.修改语言时区 存储时间(修改为False后再数据库保存数据时就为本地时间,否则为UTC时间
settings-LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Shanghai' USE_TZ = False
3.将UserProfile注册进admin管理后台users-admin.py,并写一个管理器UserProfileAdmin
from .models import UserProfile
class UserProfileAdmin(admin.ModelAdmin):
pass
admin.site.register(UserProfile, UserProfileAdmin)

  1. 在settings中添加以下内容,以修复1452, 'Cannot add or update a child row:
    a foreign key constraint fails

DATABASES = {
'default': {
...
"init_command": "SET foreign_key_checks = 0;",
},
}

添加xadmin

  1. pip install xadmin
  2. 在settings注册'xadmin','crispy_forms'
  3. 把默认的admin指向xadmin,urls.py 这样就完成了admin的替换
  4. 注销掉原来users-admin.py中的admin注册方式
  5. 把admin中的表同步过来 makemigrations
  6. 下载xadmin源码,在项目根目录下创建文件夹extra_apps,把下载的源码中xadmin文件夹放进去
    再把extra_apps mark为source root
  7. 卸载xadmin pip uninstall xadmin
  8. 发生ImportError: No module named xadmin,把extra_apps 增加到搜索目录下

users app的moudel注册

  1. xadmin会自动搜寻每个app下adminx文件
  2. 所以在users下新建adminx.py文件,将EmailVerifyRecordAdmin注册进users-adminx.py
  3. 在测试添加邮箱验证码时IndexError at /xadmin/users/emailverifyrecord/add/
  4. 重载EmailVerifyRecord unicode方法
  5. 在邮箱验证码中自定义显示的列,修改注册的users-adminx.py EmailVerifyRecordAdmin
    list_display = ['code', 'email', 'send_type', 'send_time']
  6. 增加查找功能search_fields = ['code', 'email']
  7. 增加过滤器功能list_filter=['code', 'email', 'send_type', 'send_time']

将各个moudel注册到xadmin中

  1. 在courses下新建adminx,把各moudle注册到xadmin中
  2. 指定搜索外键的字段,在名称中添加双下划线,course__name
  3. 重复以上操作把各个moudel加进来

管理面板收起app导航栏,添加主题,全局配置名称

  1. 在users-adminx.py中添加
    class BaseSetting(object):
    enable_themes = True
    use_bootswatch = True

class GlobalSetting(object):
site_title = '幕学后台管理系统'
site_footer = '幕学在线网'
menu_style = 'accordion'

app名称改为中文

  1. 在apps下的每个app中apps.py文件中添加中文名称
  2. init加上引用。
    在每个app init.py 添加变量default_app_config

第六章

  1. 在根目录下新建static文件夹,将静态文件复制到此目录下
  2. 在urls中配置,以处理静态文件
  3. 在settings中添加静态文件存放路径,修改index.html中css,js引用路径
  4. 将login页面添加到urls中,注意根目录下的文件如login前不需要加/

用户登录

  1. users-views.py 添加login登录逻辑
  2. 默认方式为用户名登录,添加邮箱登录方式
    在settings重载变量
    AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
    )
    并在views中定义CustomBackend

session 和cookie
用户注册

  1. 在views定义注册RedisterView,在urls中设置RedisterView
  2. 把注册页面放到根目录下
  3. 修改 register.html 中css js的引用路径
    例如../css/login.css 修改为{% static 'css/login.css' %}
    这样会根据settings中的配置STATIC_URL = '/static/'自动配置,
    以后变更地址就只需修改STATIC_URL
  4. 在虚拟环境中安装注册码插件 captcha
  5. 按照captcha 说明进行配置
  6. makemigrations migrate

用户注册

  1. 验证输入
    取出用户名,密码
  2. 实例化UserProfile
  3. 给UserProfile的实例赋值username,email
  4. 密码加密
  5. 保存进数据库
    给邮箱发送激活链接
    1.在apps下新建package utils,用来存放邮箱验证模块
  6. 定义send_register_email
    在链接里加上后台生成的随机字符串
    用户在点击链接时,把加上的随机字符串取出来
    然后在数据库中去查询,存在就激活,不存在就报错
  7. 处理用户激活
    4.判断注册邮箱是否已存在

找回密码

详情页
https://github.com/xinghezhao/MxOnline.git
https://github.com/xinghezhao/MxOnline.git

总结

  1. 使用xadmin代替admin做为后台管理系统
  2. 登录,注册,找回密码
  3. 课程机构功能:机构列表,机构详情页,咨询提交
  4. 课程功能:课程列表,课程详情页
  5. 讲师:讲师列表,讲师详情页
  6. 个人中心功能: 用户学信息修改,全局搜索

pythonanywhere superuser jeff 120880127p

EMAIL_HOST = 'smtp.sina.com'
EMAIL_PORT = 25
EMAIL_HOST_USER = 'djangomuke@sina.com'
EMAIL_HOST_PASSWORD = '120880127s'
EMAIL_USE_TLS = False
EMAIL_FROM = 'djangomuke@sina.com'

EMAIL_HOST = "smtp.gmail.com"
EMAIL_HOST_USER = "Jeff.xxnn@gmail.com"
EMAIL_HOST_PASSWORD = 'mvcwrcnovxdfakeq'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

EMAIL_FROM = 'Jeff.xxnn@gmail.com'