轻松一刻------博文

第一次编写博文,还有点小紧张!下面是一段关于Django框架的一段博文代码!如有不会的可以留言告诉我哦!



1.froms.py

from django import forms
import time
from datetime import datetime

class UserForm(forms.Form):
    username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control','placeholder':'请输入用户名'}))
    password = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder':'请输入密码'}))

class RegisterForm(forms.Form):
    gender = (
        ('male', "男"),
        ('female', "女"),
    )
    username = forms.CharField(label="用户名", max_length=128, widget=forms.TextInput(attrs={'class': 'form-control','placeholder':'请输入用户名'}))
    password1 = forms.CharField(label="密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder':'请输入密码'}))
    password2 = forms.CharField(label="确认密码", max_length=256, widget=forms.PasswordInput(attrs={'class': 'form-control','placeholder':'请再次输入密码'}))
    email = forms.EmailField(label="邮箱地址", widget=forms.EmailInput(attrs={'class': 'form-control','placeholder':'请输入邮箱地址'}))
    sex = forms.ChoiceField(label='性别', choices=gender)

class ArticleForm(forms.Form):
    articletitle = forms.CharField(label='文章标题',max_length=100,widget=forms.TextInput(attrs={'placeholder':'请输入文章标题'}))
    articlecontent = forms.CharField(label='文章正文',widget=forms.Textarea(attrs={'placeholder':'请输入文章正文'}))
    # articlectime = forms.DateTimeField(label='创建时间',widget=forms.DateTimeInput)

class CommentsForm(forms.Form):
    # comments_names = forms.CharField(max_length=128)#用户名称
    comments_contents = forms.CharField(label='正文',widget=forms.Textarea(attrs={'placeholder':'请输入评论正文'}))#评论正文
    # comments_times = forms.DateTimeField(verbose_name='发布时间',blank=True,null=True)#评论发布时间

2.admin.py

from django.contrib import admin
from . import models

class UserAdmin(admin.ModelAdmin):
     list_display=['name','email','sex','c_time']#定在 列表页 中能够显示的字段们
     list_display_links=['name','email']#允许被连接到详情页的字段们
     search_fields=['name','sex']#允许被搜索的字段
     list_filter=['name','email']#右侧添加过滤器
     date_hierarchy='c_time'#增加时间过滤器
     fieldsets=(
            #分组1
            (
                '基本信息',{
                    'fields':('name','email','sex'),
                }
            ),
        )

class ArticleAdmin(admin.ModelAdmin):
     list_display=['title','content','pub_time']#定在 列表页 中能够显示的字段们
     list_display_links=['title','content']#允许被连接到详情页的字段们
     search_fields=['title','content']#允许被搜索的字段
     list_filter=['title']#右侧添加过滤器
     date_hierarchy='pub_time'#增加时间过滤器

class CommentsAdmin(admin.ModelAdmin):
     list_display=['comments_name','comments_content','comments_time']#定在 列表页 中能够显示的字段们
     list_display_links=['comments_name','comments_content']#允许被连接到详情页的字段们
     search_fields=['comments_name']#允许被搜索的字段
     list_filter=['comments_name']#右侧添加过滤器
     date_hierarchy='comments_time'#增加时间过滤器

admin.site.register(models.User,UserAdmin)#注册User类
admin.site.register(models.Article,ArticleAdmin)#注册Article类
admin.site.register(models.Comments,CommentsAdmin)#注册Comments类

3.models.py

from django.db import models
from time import ctime 
from django.urls import reverse

#用户表
class User(models.Model):
    '''用户表'''

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

    name = models.CharField(verbose_name='用户名',max_length=128,unique=True)#用户名称
    password = models.CharField(verbose_name='密码',max_length=256)#用户密码
    email = models.EmailField(verbose_name='邮箱',unique=True)#用户邮箱
    sex = models.CharField(verbose_name='性别',max_length=32,choices=gender,default='男')#用户性别,默认为男性
    c_time = models.DateTimeField(verbose_name='创建时间',auto_now_add=True)#创建用户的时间


    #使对象在后台显示更友好
    def __str__(self):
        return self.name

    # 使后台更易于管理(是中文)
    class Meta:
        verbose_name = '用户'
        verbose_name_plural = verbose_name
        ordering = ['-c_time']

#文章表
class Article(models.Model):
    title = models.CharField(verbose_name='标题',max_length=100)#文章标题
    content = models.TextField(verbose_name='正文',blank=True,null=True)#文章正文
    pub_time = models.DateTimeField(verbose_name='发布时间',blank=True,null=True)#文章发布时间

    #关联  User  表
    auser = models.ForeignKey(User,verbose_name='用户',null=True)#和  User  进行关联一对多的操作

    #使对象在后台显示更友好
    def __str__(self):
        return self.title

    class Meta:
        verbose_name='博客'
        verbose_name_plural = verbose_name
        ordering = ["-pub_time"]



#评论表
class Comments(models.Model):
    comments_name = models.CharField(verbose_name='评论人',max_length=128,null=True)#用户名称
    comments_content = models.TextField(verbose_name='评论文',blank=True,null=True)#评论正文
    comments_time = models.DateTimeField(verbose_name='评论时间',blank=True,null=True)#评论发布时间  

    #关联  User  表
    user = models.ManyToManyField(User)#和  User  进行关联多对多的操作

    article_c = models.ForeignKey(Article,verbose_name='文章',null=True)

    #使对象在后台显示更友好
    def __str__(self):
        return self.comments_name      

    class Meta:
        verbose_name='评论'
        verbose_name_plural=verbose_name
        ordering = ['-comments_time']


4.urls.py

from django.conf.urls import url
from . import views

app_name = 'login'
urlpatterns = [
     url(r'^$',views.index),#主页(输入127.0.0.1:8000时所返回的主页面)
     url(r'^index/',views.index),#主页(当用户退出登录时,退出到的主页面)
     url(r'^login/',views.login),#登录页
     url(r'^register/',views.register),#注册页
     url(r'^logout/',views.logout),#退出登录
     url(r'^blog/',views.myblog,name="myblog"),#博文列表
     url(r'^blogwen/',views.blogwen),#发布博文
     url(r'^comments/(?P<comments_id>[0-9]+)/$',views.comments,name='comments_bowen'),#评论博文
     url(r'^article/(?P<article_id>[0-9]+)/$',views.article,name='article'),#用于分页的操作
     url(r'^delete/(?P<delete_id>[0-9]+)/$',views.delete_data,name='delete_data'),#删除某个博文的操作
     url(r'^myblogs/',views.my_blog,name='my_blog'),#我的博文
]

5.views.py
“`
from django.shortcuts import render,redirect,render_to_response
from . import models
from django.http import HttpResponse,HttpResponseRedirect
from .models import Article,Comments,User
from .froms import UserForm,RegisterForm,ArticleForm,CommentsForm
import time,datetime
import hashlib
from django.shortcuts import render_to_response
from pure_pagination import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render, get_object_or_404

主页面的返回

def index(request):
return render(request,’login/index.html’)

用户登录

def login(request):
# 通过session来判断用户是否已经登录,如果是登录状态,则不可以重复登录
if request.session.get(‘is_login’,None):
return redirect(‘/index’)

if request.method == "POST":
    login_form = UserForm(request.POST)
    message = "请检查填写的内容!"
    if login_form.is_valid():
        username = login_form.cleaned_data['username']
        password = login_form.cleaned_data['password']
        try:
            user = models.User.objects.get(name=username)
            if user.password == hash_code(password):
                request.session['is_login'] = True
                request.session['user_id'] = user.id
                request.session['user_name'] = user.name
                return redirect('/index/')
            else:
                message = "密码不正确!"
        except:
            message = "用户不存在!"
    return render(request, 'login/login.html', locals())

login_form = UserForm()
return render(request, 'login/login.html', locals())

用户注册

def register(request):
if request.session.get(‘is_login’, None):
# 登录状态不允许注册。你可以修改这条原则!
return redirect(“/index/”)#render是渲染变量到模板中,而redirect是HTTP中的1个跳转的函数,一般会生成302状态码
if request.method == “POST”:
register_form = RegisterForm(request.POST)#获取到用户提交过来的数据
message = “请检查填写的内容!”
if register_form.is_valid(): # 获取数据是否有效
username = register_form.cleaned_data[‘username’]#获取用户提交过来的username
password1 = register_form.cleaned_data[‘password1’]
password2 = register_form.cleaned_data[‘password2’]
email = register_form.cleaned_data[‘email’]
sex = register_form.cleaned_data[‘sex’]
if password1 != password2: # 判断两次密码是否相同
message = “两次输入的密码不同!”
return render(request, ‘login/register.html’, locals())
else:
same_name_user = models.User.objects.filter(name=username)
if same_name_user: # 用户名唯一
message = ‘用户已经存在,请重新选择用户名!’
return render(request, ‘login/register.html’, locals())
same_email_user = models.User.objects.filter(email=email)
if same_email_user: # 邮箱地址唯一
message = ‘该邮箱地址已被注册,请使用别的邮箱!’
return render(request, ‘login/register.html’, locals())

            # 当一切都OK的情况下,创建新用户

            new_user = models.User.objects.create()
            new_user.name = username
            new_user.password = hash_code(password1)
            new_user.email = email
            new_user.sex = sex
            new_user.save()#保存用户的信息到数据库
            return redirect('/login/')  # 自动跳转到登录页面
register_form = RegisterForm()#实例化RegisterForm
return render(request, 'login/register.html', locals())

用户退出

def logout(request):
if not request.session.get(‘is_login’, None):
# 如果本来就未登录,也就没有登出一说
return redirect(“/index/”)
request.session.flush()
# 或者使用下面的方法
# del request.session[‘is_login’]
# del request.session[‘user_id’]
# del request.session[‘user_name’]
return redirect(“/index/”)

def myblog(request):
all_blog = Article.objects.all().order_by(‘-id’)#获取Article表中的全部数据,根据id的降序排列
# 分页
try:
page = request.GET.get(‘page’, 1)#获取页数,默认为1
except PageNotAnInteger:
page = 1
p = Paginator(all_blog, 3, request=request) #5为每页展示的博客数目

orgs = p.page(page)
return render(request, 'blog/blog.html', {'all_blog': orgs,})

博文

def blogwen(request):
if request.method == ‘POST’:
blogwen_form = ArticleForm(request.POST)
message = “请检查填写的内容!”
if blogwen_form.is_valid():
articletitle = blogwen_form.cleaned_data[‘articletitle’]
articlecontent = blogwen_form.cleaned_data[‘articlecontent’]
new_blogwen = models.Article.objects.create()
new_blogwen.title = articletitle
new_blogwen.content = articlecontent
new_blogwen.pub_time = datetime.datetime.now()#当用户提交博文请求时,默认给一个当前时间戳到数据库
new_blogwen.auser_id = request.session[‘user_id’]
new_blogwen.save()
return redirect(‘/blog/’)
blogwen_form = ArticleForm()
return render(request,’blog/blogwen.html’, locals())

评论

def comments(request,comments_id):
# if request.session.get(‘comments_id’,None):
# return redirect(‘/blog/’)
if request.method == “POST”:
comments_form = CommentsForm(request.POST)#获取到用户提交过来的数据
message = “请检查填写的内容!”
if comments_form.is_valid(): # 获取数据是否有效
comments_contents = comments_form.cleaned_data[‘comments_contents’]#获取用户提交过来的username

        #保存数据
        # comments = Comments.objects.get(id=comments_id)
        # user_list = comments.user.all()

        new_comments = models.Comments.objects.create()
        # new_comments.id = comments_id
        new_comments.comments_name = request.session['user_name']#获取登录时的用户名
        new_comments.comments_content = comments_contents
        new_comments.comments_time = datetime.datetime.now()#当用户提交博文请求时,默认给一个当前时间戳到数据库
        new_comments.article_c_id = comments_id
        new_comments.save()
        return redirect('/blog/')
comments_form = CommentsForm()

return render(request,'blog/comments.html',{'comments_form':comments_form,'comments_id':comments_id})

hash

def hash_code(s, salt=’mysite’):# 加点盐
h = hashlib.sha256()
s += salt
h.update(s.encode()) # update方法只接收bytes类型
return h.hexdigest()

def page(request):
page = Article.objects.all()
return render(request,’blog/blog.html’,{‘page’:page})

分页

def article(request,article_id):
article_all = Article.objects.get(id=article_id)
# comments_all = Comments.objects.get(id=article_id)
article = get_object_or_404(Article,id=article_id)

#正向查询
# comments = Comments.objects.get(id=article_id)
# user_list = comments.user.all()

article_c = Article.objects.get(id=article_id)
comments_list = article_c.comments_set.all()
return render(request,"blog/article.html",locals())

删除

def delete_data(request,delete_id):
article_u = Article.objects.get(id=delete_id)
auser = article_u.auser
if auser.name == request.session[‘user_name’]:

    dels = Article.objects.get(id=delete_id)
    dels.delete()
    return HttpResponseRedirect('/blog/')
else:
    return HttpResponse('对不起,你没有删除权限')
    # return HttpResponseRedirect('/blog/')

我的博文

def my_blog(request):
#一对多的关联
auser = User.objects.get(name=request.session[‘user_name’])
article_list = auser.article_set.all()

# article_all = article_list.order_by('-id')
# all_blog = Article.objects.get(auser_id=request.session['user_id']).order_by('-id')
# 分页
try:
    page = request.GET.get('page', 1)#获取页数,默认为1
except PageNotAnInteger:
    page = 1
p = Paginator(article_list, 3, request=request)  #5为每页展示的博客数目

orgs = p.page(page)
return render(request,'blog/myblogs.html',{'article_list':article_list})
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值