django知识点补充

如要要继承自auth的用户表,等要继承实体类写好了再开始第一次同步,暂时不清楚为什么,但之前都同步失败了

0.关于django中的静态文件的配置

# 配置前端页面中访问静态资源的起始路径
STATIC_URL = '/static/'
# 开发阶段:指定静态资源所在目录,STATIC_ROOT用来配置部署后静态资源路径
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),]

1. 注释:

单行注释:{# 注释内容 #}
多行注释:
{% comment %}
  多行注释内容
{% endcomment %}

2.创建项目和应用

#建立django项目
django-admin startproject XXXX
#创建app
python3 manage.py startapp XXXXapp

#数据库迁移
python3 manage.py makemigrations
python3 manage.py migrate

#注册后台显示
admin.site.register(UserInfo)

#创建后台用户
python3 manage.py createsuperuser

#创建项目环境
virtualenv XXXXenv
#引入环境
source XXXXenv/bin/activate

3.继承自user类
自带的user表默认的字段
在这里插入图片描述

from django.db import models
from django.contrib.auth.models import AbstractUser

# Create your models here.
SEX_CHOICES = (
    ('0', '男'),
    ('1', '女'),
)

class UserInfo(AbstractUser):
    cellphone = models.CharField(max_length=11, null=False, verbose_name='手机')
    realname = models.CharField(max_length=50, null=False, verbose_name='姓名')
    uidentity = models.CharField(max_length=18, null=False, verbose_name='身份证')
    address = models.CharField(max_length=150, null=False, verbose_name='地址')
    sex = models.CharField('性别',choices=SEX_CHOICES, default='0', max_length=10)

    def __str__(self):
        return self.username

    class Meta:
        db_table = 'Users'
        verbose_name = '用户信息表'
        verbose_name_plural = verbose_name

4.项目搭建流程
创建项目 —> 创建应用 —> 更改配置文件(注册app,修改数据库配置) —> 创建实体类,同步
—> 开发app

DATABASES = {
	#配置数据库,键全部大写
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': 'localhost',
        'PORT': 3306,
        'NAME': 'mytest',
    }
}
#继承django自带user类:app名.类名
AUTH_USER_MODEL = 'test1.StaffInfo'

LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'

#设置session在cookie中的保存时长
SESSION_COOKIE_AGE = 60*30
#设置浏览器关闭后session失效
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
#admin.py中设置后台显示
from django.contrib import admin
from test1.models import *
# Register your models here.
admin.site.register(StaffInfo)

5.设置局域网访问:

#指定运行地址:
python3 manage.py runserver 192.168.121.128:8000
#修改配置文件
ALLOWED_HOSTS = ['*']

6.文件上传:
创建模型

# 设置上传路径和文件名
def file_name(instance,filename):
    ext = filename.split('.')[-1]
    filename = datetime.datetime.now().strftime('%Y%m%d%H%M%S%f') + '.' + ext
    return 'front/static/upload/file/'+filename

class File(models.Model):
    user = models.ForeignKey(User, verbose_name='用户', on_delete=models.CASCADE)
    #upload_to 参数写上面定义的函数名,函数执行后返回路径
    file = models.ImageField(upload_to=file_name, verbose_name='图片')
    upload_time = models.DateTimeField(verbose_name='上传时间')

服务端接受

# 登陆状态下返回文件上传页面
@login_required
def upload(request):
    return render(request, 'upload.html')

# 接受文件并保存
@login_required
def upload_(request):
    if request.method == 'POST':
        file = File()
        file.user = request.user
        # 此处接收文件对象,存入数据库中的是路径,服务端保存文件的路径依据upload_to确定
        file.file = request.FILES.get('image')
        # 存入时间
        file.upload_time = datetime.now()
        file.save()
        return HttpResponse('上传成功')

7.利用django自带登陆验证功能

from django.contrib import auth

def login_(request):
    if request.method == 'GET':
        return render(request,'login.html',{'message':'登录撒'})
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        #django自带登录验证功能,账号密码正确则返回用户对象,否则返回None
        user = auth.authenticate(username=username,password=password)
        if user is not None and user.is_active:
            #将登录信息存入session,渲染模板时直接调用此对象{{ request.user.username }}
            auth.login(request,user)
            return redirect('/')
        else:
            return HttpResponse('登录失败')

#登出:auth.logout(request)

如果用户当前没有登录,user 将设置为 django.contrib.auth.models.AnonymousUser 的一个实例。
服务端可以通过 is_authenticated区分它们

def register(request):
    # 注册前判断是否已登录
    if request.user.is_authenticated:
        return redirect('/')
    return render(request,'register.html')

前端可以通过 {% if request.user.is_authenticated %}判断用户是否登录

{% if request.user.is_authenticated %}
    {{ '已经登陆啦' }}
    <br>
    用户名{{ request.user.username }}
    <br>
    姓名{{ request.user.name }}
    <br>
    id{{ request.user.id }}

{% else %}
    {{ '还没登录哦' }}
{% endif %}

8.静态资源的两种引用方式

{% load static %}
<img src="{% static 'img/7.jpg' %} " alt="" width="200px">
<img src="/static/img/7.jpg" alt="" width="200px">

9.django会将session存入django_session表中,点击登出后会删除表中的记录,若用户直接关闭浏览器,可通过设置SESSION_EXPIRE_AT_BROWSER_CLOSE = True,以此来保证关闭浏览器时退出登录,但该情况下,django并不会删除所生成的记录,日积月累,django_session表中的数据越来越多,需要定期的执行python manage.py clearsessions来清除过期的session。

10.访问限制 @login_required
某些页面需要用户登陆后才可以访问,如果用户没有登陆而直接访问就会跳转到登陆界面。
实现方法:
1、在相应的 view 方法的前面添加 django 自带的装饰器 @login_required

from django.contrib.auth.decorators import login_required

@login_required
def query_(request):
    if request.is_ajax():
        order_no = request.GET.get('order_no')
        start_date = request.GET.get('start_date')
        end_date = request.GET.get('end_date')
        records = Recode.objects.all()

2、在 settings.py 中配置 LOGIN_URL 参数

LOGIN_URL = '/login/'

11.数据库迁移报错

django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None

参考:https://www.cnblogs.com/imyalost/p/8542181.html
MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,可以修改文件:/home/tarena/.local/lib/python3.5/site-packages/django/db/backends/mysql/base.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值