项目 message
创建项目
django-admin startproject HelloWorld
添加apps
django-admin startapp TestModel
- settings.py
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))
sys.path.insert(0, os.path.join(BASE_DIR, 'extra_apps'))
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps.message1.apps.Message1Config',
'users.apps.UsersConfig',
'courses',
'organization',
'operation',
'xadmin',
'crispy_forms',
'captcha',
'DjangoUeditor',
]
- apps 下面 apps.py
from django.apps import AppConfig
class CoursesConfig(AppConfig):
name = 'courses'
verbose_name = "课程管理"
path url 区别
from django.urls import path
from django.conf.urls import url # 等价于 from django.urls import re_path
url(r'^articles/(?P<year>[0-9]{4})/$',views.special_2003)
path("r'articles/<int:year>/',views.special_2003")
数据库migrate操作
$ python manage.py migrate # 创建表结构
$ python manage.py makemigrations TestModel # 让 Django 知道我们在我们的模型有一些变更
$ python manage.py migrate TestModel # 创建表结构
-
QuerySet
是延迟获取的,只有当用到这个QuerySet时,才会查询数据库求值。另外,查询到的QuerySet又是缓存的,当再次使用同一个QuerySet时,并不会再查询数据库,而是直接从缓存获取(不过,有一些特殊情况)。 -
使用mysql
__init__.py下
import pymysql
pymysql.install_as_MySQLdb()
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '192.168.108.1',
# 'HOST': 'localhost',
'USER': 'root',
'PASSWORD': 'thinker',
'NAME': 'messages',
'PORT': '3306',
}
}
登录操作
- 登录注册
from django.contrib.auth import authenticate, login, logout
def my_view(request):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
login(request, user)
# 跳转到成功页面.
else:
# 返回一个无效帐户的错误
else:
# 返回登录失败页面。
def logout_view(request):
logout(request)
- 验证登录
def my_view(request):
if not request.user.is_authenticated():
return HttpResponseRedirect('/login/?next=%s' % request.path)
from django.contrib.auth.decorators import login_required
@login_required(login_url='/accounts/login/')
def my_view(request):
template
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media', # template 添加 MEDIA_URL 路径
],
},
},
]
view ListView, DetailView
csrf:
from django.views.decorators.csrf import csrf_exempt, csrf_protect
@csrf_exempt # 函数无需认证
def uers(request):
xxx
from django.utils.decorators import method_decorator
@method_decorator(csrf_exempt, name='dispatch') # 只有应用到`dispath`才会生效
class StudentView(view):
CBV
from django.views import View
class StudentView(view):
form类
from django import forms
class RegisterForm(forms.Form):
email = forms.EmailField(required=True)
password = forms.CharField(required=True, min_length=5)
captcha = CaptchaField(error_messages={'invalid': "验证码错误"})
# view
from .forms import LoginForm, RegisterForm, UserImageForm
login_form = LoginForm(request.POST)
if not login_form.is_valid():
return render(request, 'login.html', {'msg': '用户名或密码错误', 'login_form': login_form})
待續













网友评论