Python-用户账户与应用步调样式
第十九章 用户账户与数据管理19.1 用户输入数据处理
19.1.1 添加新主题
操纵步调:
1. 在models.py中定义Topic模型(需关联用户):
from django.contrib.auth.models import User
class Topic(models.Model):
owner = models.ForeignKey(User, on_delete=models.CASCADE)
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True) 语法阐明:
- ForeignKey建立用户与主题的一对多关系
- on_delete=models.CASCADE表示用户删除时级联删除关联数据
2. 在视图函数中限定访问:
from django.contrib.auth.decorators import login_required
@login_required
def new_topic(request):
if request.method == 'POST':
form = TopicForm(request.POST)
if form.is_valid():
new_topic = form.save(commit=False)
new_topic.owner = request.user # 关联当前用户
new_topic.save()
return redirect('learning_logs:index')
else:
form = TopicForm()
return render(request, 'new_topic.html', {'form': form}) 用法解析:
- @login_required装饰器限定未登录用户访问
- commit=False暂不提交数据库,允许添加额外字段
19.2 创建用户认证系统
19.2.1 创建users应用
执行命令:
python manage.py startapp users
19.2.2 配置settings.py
在INSTALLED_APPS添加:
'users.apps.UsersConfig'
在文件末尾添加:
LOGIN_URL = 'users:login' # 指定登录页面路径
19.2.3 用户登录实现
登录视图示例:
from django.contrib.auth import authenticate, login
def user_login(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
return redirect('learning_logs:index')
else:
return HttpResponse('Invalid login')
return render(request, 'registration/login.html') 核心方法阐明:
- authenticate()验证用户凭据
- login()创建用户会话
19.3 数据权限控制
19.3.1 查询过滤
在视图中限定数据访问:
def topic(request, topic_id):
topic = Topic.objects.get(id=topic_id)
if topic.owner != request.user:
raise Http404 # 非所有者触发404错误
entries = topic.entry_set.order_by('-date_added')
return render(request, 'topic.html', {'topic':topic, 'entries':entries}) 第二十章 样式设置与部署
20.1 使用Bootstrap美化界面
20.1.1 安装django-bootstrap4
执行:
pip install django-bootstrap4
配置settings.py:
INSTALLED_APPS += ['bootstrap4']
20.1.2 修改base模板
在templates/base.html中添加:
{% load bootstrap4 %}
<head>
{% bootstrap_css %}
{% bootstrap_javascript jquery='full' %}
</head>
<body>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<!-- 导航栏内容 -->
</nav>
<div class="container">
{% block content %}{% endblock %}
</div>
</body> 功能阐明:
- bootstrap4模板标签自动加载静态资源
- container类实现相应式结构
20.2 部署到Heroku
20.2.1 预备部署文件
创建Procfile(无扩展名):
web: gunicorn learning_log.wsgi --log-file -
创建requirements.txt:
pip freeze > requirements.txt
20.2.2 修改settings.py
添加配置:
import django_heroku
DEBUG = False
ALLOWED_HOSTS = ['learning-log.herokuapp.com']
django_heroku.settings(locals()) 关键参数阐明:
- DEBUG=False关闭调试模式
- django_heroku自动配置数据库等情况变量
20.2.3 Heroku命令行操纵
1. 登录Heroku:
heroku login
2. 创建应用:
heroku create learning-log
3. 设置情况变量:
heroku config:set SECRET_KEY='your_secret_key_123'
4. 部署代码:
git push heroku main
5. 迁移数据库:
heroku run python manage.py migrate
20.3 安全强化步调
20.3.1 密钥保护
在情况变量中设置SECRET_KEY:
import os
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY') 20.3.2 HTTPS配置
在settings.py中强制HTTPS:
SECURE_SSL_REDIRECT = True
SESSION_COOKIE_SECURE = True
CSRF_COOKIE_SECURE = True 关键流程总结:
1. 用户系统实现流程:
创建应用 -> 定义模型 -> 编写认证视图 -> 配置URL -> 模板集成
2. 部署流程:
安装依赖 -> 配置适配文件 -> Heroku CLI操纵 -> 数据库迁移 -> 安全设置
常见问题处理:
- 部署后静态文件丢失:需配置whitenoise中间件
- Heroku数据库连接失败:检查DATABASE_URL情况变量
- 模板继续失效:确保模板目录在settings.py的TEMPLATES中正确定义
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]