Django 点滴记录

指定项目默认的 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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值