Django project (1)

Virtual environment

# 虚拟环境安装(linux)
pip3 install pipenv
# 虚拟环境创建
virtualenv [虚拟环境的名字]
# 创建虚拟环境时指定python解释器
virtualenv -p C:\Python36\python.exe [virutalenv name]
# 进入虚拟环境
pipenv shell
# 退出虚拟环境
exit
#删除虚拟环境
pipenv --rm

Project establishment

#Django 项目建立
django-admin startproject [项目名称]

#项目结构
manage.py
settings.py
urls.py
wsgi.py

# 建立APP
python manage.py startapp [app名称] 

# app结构
__init__.py
models.py
views.py
tests.py
admin.py

# DEBUG模式
DEBUG = Ture

Settings

#1、确保django.contrib.staticfiles已经添加到settings.INSTALLED_APPS中
#2、在settings.py中设置了STATIC_URL
#3、在已经安装了的app下创建一个文件夹叫做static,然后再在这个static文件夹下创建一个当前app的名字的文件夹,再把静态文件放到这个文件夹下

#  1、静态资源文件
STATIC_URL = '/static/'
STATICFILES_DIRS = [
	os.path.join(BASE_DIR,'static')
	]

{% load static %}
 <link rel="stylesheet" href="{% static 'style.css' %}">
'builtins':['django.templatetags.static']  #settings.INSTALLED_APPS中  不用每个文件都load static

#  2、设置文件上传地址
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
MEDIA_URL = '/media/'

# 3、语言设置
LANGUAGE_CODE = 'zh-Hans'
# 4、时间设置
TIME_ZONE = 'Asia/Shanghai'

# 5、TEMPLATES 路径设置
'DIRS': [os.path.join(BASE_DIR,'templates')],

# 6、数据库的连接
DATABASES = {
    'default': {
        # 数据库引擎(是mysql还是oracle等)
        'ENGINE': 'django.db.backends.mysql',
        # 数据库的名字
        'NAME': 'logic',
        # 连接mysql数据库的用户名
        'USER': 'root',
        # 连接mysql数据库的密码
        'PASSWORD': 'root',
        # mysql数据库的主机地址
        'HOST': '127.0.0.1',
        # mysql数据库的端口号
        'PORT': '3306',
    }

user table coverage


# user.model 中
from django.db import models
from django.contrib.auth.models import AbstractUser

GENDER_CHOICES = (
    ('male','男'),
    ('female','女')
)

class UserProfile(AbstractUser):
	nick_name = models.CharField(max_length=20,null=True,verbose_name='昵称')
    birthday = models.DateField(verbose_name='生日',null=True)
    gender = models.CharField(verbose_name='性别',choices=GENDER_CHOICES,max_length=2)
    address = models.CharField(max_length=100,verbose_name='地址',null=True)
    mobile = models.CharField(max_length=11,unique=True,verbose_name='手机号码')
    image = models.ImageField(upload_to='head_image/%Y/%m/%d')
	
	# 后台管理系统中显示中文
	class Meta:
        verbose_name = '用户信息'
        verbose_name_plural = verbose_name
    
    def __str__(self):
        if self.nick_name:
            return self.nick_name
        else:
            return self.username

# setting 文件中添加(用于重载users表)
AUTH_USER_MODEL = 'users.UserProfile'

# 映射数据表
python manage.py makemigrations users
python manage.py migrate users

Create Super User

python manage.py createsuperuser

admin registration

# apps.users.admin

from django.contrib import admin
from apps.users.models import UserProfile

class UserProfileAdmin(admin.ModelAdmin):   # 建立一个UserProfileAdmin类,继承自admin.ModelAdmin
	pass

admin.site.register(UserProfile,UserProfileAdmin)    # 将 UserProfile 注册到 UserProfileAdmin

xadmin import registration

# 下载依赖库

# app 注册
 'crispy_forms',
 'xadmin',
 
# urls.py
urlpatterns = [
	path('xadmin/',xadmin.site.urls),
	]

python manage.py makemigrations xadmin
python manage.py migrate xadmin

# 将models注册到 xadmin 中(apps.users.xadmin.py)
import xadmin
from apps.courses.models import Course
class CourseAdmin(object):
	pass

xadmin.site.register(Course,CourseAdmin)

# xadmin界面设置列表、搜索、过滤、等信息
class CityAdmin(object):
    # 列表页面显示的字段
    list_display = ['id','name','desc']
    # 搜索的字段
    search_fields = ['name','desc']
    # 过滤字段
    list_filter = ['name','desc']
    # 修改字段
    list_editable = ['name','desc']
xadmin.site.register(City,CityAdmin)

xadim Chinese app name display Chinese

# users.__init__
default_app_config = 'apps.users.apps.UsersConfig'

# users.apps
from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'apps.users'
    verbose_name = '用户信息'

View mode

# 路由映射(两部分组成,主函数中一个、APP中自建一个)
# url的模块化
urlpatterns = [
    path('',include("apps.user.urls"))
]

# apps.user.urls
from news import views
urlpatterns =[
	path("",views.index,name = "index")   # 路由映射关系
]

# 写在 app 中的views.py中
# 视图第一个参数 为request(HttpRequest)对象
# 如下:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
    return render(request,'index.html')	


#**django 内置的验证用户是否存在的方法 authenticate**
# **内置的登陆方法 login**
from django.contrib.auth import authenticate,login
# 对form表单提交上来的数据进行提取
username = request.POST.get("username")
password = request.POST.get("password")
# authenticate方法
user = authenticate(username = username,password = password)
if user is not None:
	# 内置登陆方法login  (省去了cookie、session操作)
	login(request,user)
	return redicet(reverse('front':'index'))  # 页面重定向
else:
	return render(request,'login.html',{'msg':'用户名或密码错误'})
	

# forms 表单验证
# apps.user.forms(modelform 全校验、forms.Form部分验证)
from django import forms
class LoginForm(forms.Form):
	username = forms.CharField(required = Ture,min_length = 2)
	password = forms.charField(request = Ture,min_length = 3)


# apps.users.views.py  (验证过程)
form apps.users.forms import LoginForm

class LoginView(View):
	def post(self,request):
		forms = LoginForms(request.POST)   # 表单验证
        if forms.is_valid():
            username = request.POST.get('username')
            passward = request.POST.get('password')

            user = authenticate(username = username,passward = passward)

            if user is not None:
                login(request,user)
                return redirect(reverse('front:index'))
            else:
                return render(request,'login.html',{'msg':'用户名或密码错误'})
        else:
            print(forms.error.get_json_data())
            return render(request,'login.html',{'forms.error': forms.errors,'forms':forms})
  
  # 退出方法
 class LogoutView(View):
 	def get(self,request):
 		logout(request)
 		return redirict(reverse('front:index'))
Published 50 original articles · Likes3 · Visits 1799

Guess you like

Origin blog.csdn.net/weixin_43056654/article/details/103347138