from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import ArticlePost
from .forms import ArticlePostForm
from django.contrib.auth.models import User

# Create your views here.
def helloworld(request):
    return HttpResponse("hello world")

def show_course(request):
    return render(request, "courses_table.html")

def post_index(request):

    articles = ArticlePost.objects.all()
    content = {'articles': articles}

    return render(request, "blog/index.html", content)
def get_detail(request, id):
    import markdown
    article = ArticlePost.objects.get(id = id)

    article.body = markdown.markdown("""<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {inlineMath: [['$', '$']]},
        messageStyle: "none"
    });
</script>""" + article.body,
        extensions=[
        # 包含 缩写、表格等常用扩展
        'markdown.extensions.extra',
        # 语法高亮扩展
        'markdown.extensions.codehilite',
        ])

    content = {'article': article}
    return render(request, "blog/detail.html", content)

def create_article(request):
    if (request.method == "POST"):
        article_post_form = ArticlePostForm(data = request.POST)
        if article_post_form.is_valid():
            # 保存数据，但暂时不提交到数据库中
            new_article = article_post_form.save(commit=False)
            # 指定数据库中 id=1 的用户为作者
            # 如果你进行过删除数据表的操作，可能会找不到id=1的用户
            # 此时请重新创建用户，并传入此用户的id
            new_article.author = User.objects.get(id=1)
            # 将新文章保存到数据库中
            new_article.save()
            # 完成后返回到文章列表
            return redirect("jwxt:blog")
        # 如果数据不合法，返回错误信息
        else:
            return HttpResponse("表单内容有误，请重新填写。")
    # 如果用户请求获取数据
    else:
        # 创建表单类实例
        article_post_form = ArticlePostForm()
        # 赋值上下文
        context = { 'article_post_form': article_post_form }
        # 返回模板
        return render(request, 'blog/create.html', context)
def delete_article(request, id):
    article = ArticlePost.objects.get(id = id)
    article.delete()
    return redirect("jwxt:blog")

def update_article(request, id):
    """
    更新文章的视图函数
    通过POST方法提交表单，更新titile、body字段
    GET方法进入初始表单页面
    id： 文章的 id
    """

    # 获取需要修改的具体文章对象
    article = ArticlePost.objects.get(id=id)
    # 判断用户是否为 POST 提交表单数据
    if request.method == "POST":
        # 将提交的数据赋值到表单实例中
        article_post_form = ArticlePostForm(data=request.POST)
        # 判断提交的数据是否满足模型的要求
        if article_post_form.is_valid():
            # 保存新写入的 title、body 数据并保存
            article.title = request.POST['title']
            article.body = request.POST['body']
            article.save()
            # 完成后返回到修改后的文章中。需传入文章的 id 值
            return redirect("jwxt:detail", id=id)
        # 如果数据不合法，返回错误信息
        else:
            return HttpResponse("表单内容有误，请重新填写。")

    # 如果用户 GET 请求获取数据
    else:
        # 创建表单类实例
        article_post_form = ArticlePostForm()
        # 赋值上下文，将 article 文章对象也传递进去，以便提取旧的内容
        context = { 'article': article, 'article_post_form': article_post_form }
        # 将响应返回到模板中
        return render(request, 'blog/update.html', context)

from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import ArticlePost
from .forms import ArticlePostForm
from django.contrib.auth.models import User

# Create your views here.
def helloworld(request):
    return HttpResponse("hello world")

def show_course(request):
    return render(request, "courses_table.html")

def post_index(request):

    articles = ArticlePost.objects.all()
    content = {'articles': articles}

    return render(request, "blog/index.html", content)
def get_detail(request, id):
    import markdown
    article = ArticlePost.objects.get(id = id)

    article.body = markdown.markdown("""<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
<script type="text/x-mathjax-config">
    MathJax.Hub.Config({
        tex2jax: {inlineMath: [['$', '$']]},
        messageStyle: "none"
    });
</script>""" + article.body,
        extensions=[
        # 包含 缩写、表格等常用扩展
        'markdown.extensions.extra',
        # 语法高亮扩展
        'markdown.extensions.codehilite',
        ])

    content = {'article': article}
    return render(request, "blog/detail.html", content)

def create_article(request):
    if (request.method == "POST"):
        article_post_form = ArticlePostForm(data = request.POST)
        if article_post_form.is_valid():
            # 保存数据，但暂时不提交到数据库中
            new_article = article_post_form.save(commit=False)
            # 指定数据库中 id=1 的用户为作者
            # 如果你进行过删除数据表的操作，可能会找不到id=1的用户
            # 此时请重新创建用户，并传入此用户的id
            new_article.author = User.objects.get(id=1)
            # 将新文章保存到数据库中
            new_article.save()
            # 完成后返回到文章列表
            return redirect("jwxt:blog")
        # 如果数据不合法，返回错误信息
        else:
            return HttpResponse("表单内容有误，请重新填写。")
    # 如果用户请求获取数据
    else:
        # 创建表单类实例
        article_post_form = ArticlePostForm()
        # 赋值上下文
        context = { 'article_post_form': article_post_form }
        # 返回模板
        return render(request, 'blog/create.html', context)
def delete_article(request, id):
    article = ArticlePost.objects.get(id = id)
    article.delete()
    return redirect("jwxt:blog")

def update_article(request, id):
    """
    更新文章的视图函数
    通过POST方法提交表单，更新titile、body字段
    GET方法进入初始表单页面
    id： 文章的 id
    """

    # 获取需要修改的具体文章对象
    article = ArticlePost.objects.get(id=id)
    # 判断用户是否为 POST 提交表单数据
    if request.method == "POST":
        # 将提交的数据赋值到表单实例中
        article_post_form = ArticlePostForm(data=request.POST)
        # 判断提交的数据是否满足模型的要求
        if article_post_form.is_valid():
            # 保存新写入的 title、body 数据并保存
            article.title = request.POST['title']
            article.body = request.POST['body']
            article.save()
            # 完成后返回到修改后的文章中。需传入文章的 id 值
            return redirect("jwxt:detail", id=id)
        # 如果数据不合法，返回错误信息
        else:
            return HttpResponse("表单内容有误，请重新填写。")

    # 如果用户 GET 请求获取数据
    else:
        # 创建表单类实例
        article_post_form = ArticlePostForm()
        # 赋值上下文，将 article 文章对象也传递进去，以便提取旧的内容
        context = { 'article': article, 'article_post_form': article_post_form }
        # 将响应返回到模板中
        return render(request, 'blog/update.html', context)

# Create your views here. <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> <script type="text/x-mathjax-config">     MathJax.Hub.Config({         tex2jax: {inlineMath: [['$', '$']]},         messageStyle: "none"     }); </script> # 包含 缩写、表格等常用扩展 # 语法高亮扩展 # 保存数据，但暂时不提交到数据库中 # 指定数据库中 id=1 的用户为作者 # 如果你进行过删除数据表的操作，可能会找不到id=1的用户 # 此时请重新创建用户，并传入此用户的id # 将新文章保存到数据库中 # 完成后返回到文章列表 # 如果数据不合法，返回错误信息 # 如果用户请求获取数据 # 创建表单类实例 # 赋值上下文 # 返回模板 更新文章的视图函数     通过POST方法提交表单，更新titile、body字段     GET方法进入初始表单页面     id： 文章的 id # 获取需要修改的具体文章对象 # 判断用户是否为 POST 提交表单数据 # 将提交的数据赋值到表单实例中 # 判断提交的数据是否满足模型的要求 # 保存新写入的 title、body 数据并保存 # 完成后返回到修改后的文章中。需传入文章的 id 值 # 如果数据不合法，返回错误信息 # 如果用户 GET 请求获取数据 # 创建表单类实例 # 赋值上下文，将 article 文章对象也传递进去，以便提取旧的内容 # 将响应返回到模板中