Django 点滴记录
2017-08-20 01:37
459 查看
指定项目默认的 settings.py 配置文件
如果环境变量中存在名称为 DJANGO_SETTINGS_MODULE 的变量,则该变量的值为项目的配置文件在 pycharm 中设置环境变量
或者在项目的 wsgi.py 中设置
# 或者在项目的 wsgi.py 中设置 import os from django.core.wsgi import get_wsgi_application # 指定默认的配置文件为:imooc.settings os.environ.setdefault("DJANGO_SETTINGS_MODULE", "imooc.settings") application = get_wsgi_application()
设置在 xadmin 后台显示的 app 的名称,可在 app 的 apps.py 文件中设置
例如,在 users 的 apps.py 中设置from django.apps import AppConfig class UsersConfig(AppConfig): name = 'users' verbose_name = '用户信息' # 相应地,在其他 app 的 apps.py 中也设置 from django.apps import AppConfig class CoursesConfig(AppConfig): name = 'courses' verbose_name = '课程管理'
结果:
让用户可以用邮箱登录
#setting 里要有对应的配置 class CustomBackend(ModelBackend): def authenticate(self, username=None, password=None, **kwargs): try: # Q 查询 user = UserProfile.objects.get(Q(username = username) | Q(email=username)) if user.check_password(password): return user except Exception as e: return None
后台过滤数据
# adminx.py 中配置,course 过滤掉轮播的课程 class CourseAdmin: list_display = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students', 'fav_nums', 'click_nums', 'add_time'] search_fields = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students', 'fav_nums', 'click_nums'] list_filter = ['name', 'desc', 'detail', 'degree', 'learn_times', 'students', 'fav_nums', 'click_nums', 'add_time'] ordering = ['-click_nums'] # readonly_fields 和 exclude 的字段不要重复,否则会冲突 readonly_fields = ['click_nums'] exclude = ['fav_nums'] #Inline # 添加课程的时候可以顺便添加章节、课程资源 inlines = [LessonInline, CourseResourceInline] #重新在这里写一遍的原因是,避免数据重复 def queryset(self): qs = super(CourseAdmin, self).queryset() qs = qs.filter(is_banner=False) return qs
课程搜索 - Q 查询
#课程搜索 search_keywords = request.GET.get('keywords', '') if search_keywords: all_courses = all_courses.filter( Q(name__icontains=search_keywords) | Q(desc__icontains=search_keywords) | Q(detail__icontains=search_keywords) )
得出学过该课程的同学还学过的课程
# 复杂的查询 user_courses = UserCourse.objects.filter(course=course) user_ids = [user_course.user.id for user_course in user_courses] all_user_courses = UserCourse.objects.filter(user_id__in=user_ids) course_ids = [user_course.course.id for user_course in all_user_courses]
表单字段自定义验证规则
# 当然有很多框架提供的验证器 class UserAskForm(forms.ModelForm): # 还可以新增字段 # price = forms.CharField(required=True, min_length=2, max_length=20) class Meta: model = UserAsk fields = ['name', 'mobile', 'course_name'] # def clean_name(self): # def clean_course_name(self): def clean_mobile(self): # 手机号验证 mobile = self.cleaned_data['mobile'] p = re.compile('^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}') if p.match(mobile): # 这里还能返回外键 return mobile raise forms.ValidationError('手机号码格式不对', code='mobile_inval')
发送邮件
from random import Random import string from django.core.mail import send_mail from users.models import EmailVerifyRecord from imooc.settings import EMAIL_FROM def send_register_email(email, send_type='register'): email_record = EmailVerifyRecord() code = random_str(16) email_record.code = code email_record.email = email email_record.send_type = send_type email_record.save() if send_type == 'register': email_title = '慕学在线网注册激活链接' # http://118.89.105.65 是我自己的服务器 IP 地址,你部署的时候,请换成你自己的 IP 或 域名 email_body = '请点击下面的链接激活你的账号:http://127.0.0.1:8000/active/{0}(如果是线上环境,请把 http://127.0.0.1:8000 替换成 http://118.89.105.65 )'.format(code) send_status = send_mail(email_title, email_body, EMAIL_FROM, [email]) if send_status: # TODO print('发送成功') elif send_type == 'forget': email_title = '慕雪在线网密码重置链接' email_body = '请点击下面的链接重置你的密码:http://127.0.0.1:8000/reset/{0}(如果是线上环境,请把 http://127.0.0.1:8000 替换成 http://118.89.105.65 )'.format(code) send_status = send_mail(email_title, email_body, EMAIL_FROM, [email]) if send_status: # TODO 提示发送成功 pass def random_str(random_length=16): code = '' # 26个大小写字母加数字 chars = string.ascii_letters + str(string.digits) length = len(chars) - 1 for i in range(random_length): code += chars[Random().randint(0, length)] return code
参考:高仿慕课网:py3.5 + Django1.10 + xadmin 搭建的在线课程教育平台
https://github.com/zaxlct/imooc-django
相关文章推荐
- 自学python-django已经有一段时间。从今天开始写博客记录点滴经验与大家分享。
- python 点滴记录7:django数据库操作中的filter和get方法
- python 点滴记录13:django 初尝试
- 点滴记录之-android定期备份项目版本
- 【记录】把django架到nginx上,中间通过uwsgi来转接
- vim 使用点滴记录(转到Markdown版本更新)
- ACM点滴经验与记录
- 点滴记录笔记_持续更新
- 记录java学习的点滴
- javascript自学历程---点滴记录(不断更新)
- Django双下划线方法记录
- 点滴记录——往沙盒文本中写数据
- 记录程序人生的成长点滴-前言
- django 知识记录
- 【转载】vxworks点滴记录
- 第一次记录 开启自己的生活工作点滴
- 我的编程之路点滴记录(二)
- 记录点滴
- 记录学习的点滴(ArrayList的实现原理)
- 记录点滴22(过去一年的个人总结)